)]}'
{
  "log": [
    {
      "commit": "b3802782de3eff2c0f1eda9e7c0befd8cd142162",
      "tree": "ad3fa16820f270ea5d9af00f9ed0cec5d0528635",
      "parents": [
        "c072587a609db822697f05b81316bdb862678282"
      ],
      "author": {
        "name": "Eli Zaretskii",
        "email": "eliz@gnu.org",
        "time": "Wed Apr 29 16:39:36 2026 +0300"
      },
      "committer": {
        "name": "Eli Zaretskii",
        "email": "eliz@gnu.org",
        "time": "Wed Apr 29 16:39:36 2026 +0300"
      },
      "message": "[SV 64806] Fix MS-specific format specifier\n\n* src/w32/w32os.c (osync_get_mutex): Fix format specifier.\n"
    },
    {
      "commit": "c072587a609db822697f05b81316bdb862678282",
      "tree": "a61a3287519d817f11516e912f6c945b3e5b0c4f",
      "parents": [
        "aad51b12a1ea7c2e65d73a4bb8def2daec30a170"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Aug 27 01:15:02 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Aug 27 01:30:14 2025 -0400"
      },
      "message": "[SV 67046] Don\u0027t modify the hash table when inside hash_map*()\n\nIt\u0027s illegal for the user-supplied function to modify the hash table\nwhile executing hash_map*() methods.  snap_file() may add elements\ndue to EXTRA_PREREQS, so we can\u0027t call it via hash_map_args().\n\nDiagnosis and test by Shim Manning \u003cshimmanning@gmail.com\u003e\nPossible fix by Dmitry Goncharov \u003cdgoncharov@users.sf.net\u003e\n\n* src/hash.h (hash_table): Remember when we\u0027re in hash_map*().\n* src/hash.c (hash_init): Initialize the in-map value to false.\n(hash_map): Set the in-map value to true when walking the map.\n(hash_map_arg): Ditto.\n(hash_insert_at): Assert we\u0027re not in hash_map*()\n(hash_free_items): Ditto.\n(hash_delete_items): Ditto.\n(hash_free): Ditto.\n* src/file.c (snap_deps): Use hash_dump() to create a copy of the\nhash and walk that to call snap_file(), so we can add more files.\n(snap_file): Since we\u0027re calling it directly, don\u0027t use void* args.\n"
    },
    {
      "commit": "aad51b12a1ea7c2e65d73a4bb8def2daec30a170",
      "tree": "eaf4a7115cefc302246060c7e30b7e1020f5a514",
      "parents": [
        "365a939d7cc15008f761f765d63fcb7647f92064"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:33:52 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:33:52 2025 -0400"
      },
      "message": "* doc/make.texi: [SV 66490] Clarify patsubst matches an entire word\n"
    },
    {
      "commit": "365a939d7cc15008f761f765d63fcb7647f92064",
      "tree": "ffebce30415d9012c2060bfe481e0a14e99738ff",
      "parents": [
        "f6f97956e40d48759dede8d40ba5fb9b9a5ad710"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:27:03 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:27:03 2025 -0400"
      },
      "message": "* doc/make.texi: [SV 66974] Explain unmatched include glob patterns\n"
    },
    {
      "commit": "f6f97956e40d48759dede8d40ba5fb9b9a5ad710",
      "tree": "3adfc43c932331316fd04370be5f0a22202debe9",
      "parents": [
        "6efbb37b7a09f2bf44d8ae7a0aa165644ea44a85"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:19:11 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 23:19:11 2025 -0400"
      },
      "message": "* bootstrap.bat: [SV 67162] Use curl -L to follow redirects\n"
    },
    {
      "commit": "6efbb37b7a09f2bf44d8ae7a0aa165644ea44a85",
      "tree": "421b8c4b1d2d4129baadfa76435da6bbc1713c26",
      "parents": [
        "ac2142e1a3f1ff6698197f4b53e6c0197dac1b54"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 08:53:27 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 22:54:58 2025 -0400"
      },
      "message": "* tests/scripts/features/patternrules: Check unreadable file support\n"
    },
    {
      "commit": "ac2142e1a3f1ff6698197f4b53e6c0197dac1b54",
      "tree": "c85a38f9fe5a4cf75ee96c37a67687ccfc71d8bf",
      "parents": [
        "c59cc4f932ede1c42923cfcb357d949e0941ebd8"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 08:53:00 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 22:54:34 2025 -0400"
      },
      "message": "* tests/*: Quote backticked command paths\n\nWhen using Perl\u0027s backticks make sure that the path to the command\ninvoked is quoted.  On Windows, in particular, paths to commands such\nas diff, etc. may contain whitespace.\n"
    },
    {
      "commit": "c59cc4f932ede1c42923cfcb357d949e0941ebd8",
      "tree": "37937d63fb02e1076b5642b2befc8338cf9bf454",
      "parents": [
        "fdcaaed8d7c1a2c749d3bdb96689e3d4c904049a"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Aug 25 23:20:16 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 26 08:13:55 2025 -0400"
      },
      "message": "[SV 64185] Clarify handling of directive lines starting with TAB\n\nIt\u0027s clear that this change causes too many problems to be made\nwithout warning.  Revert the change disallowing conditional lines to\nstart with TAB.\n\nInstead, generate warnings whenever a directive line begins with a\nTAB character.  Make this change for all directives, not just\nconditional directives: define, undefine, export, unexport, vpath,\nload, include, etc.\n\n* NEWS: Update the backward-compatibility warning.\n* src/read.c (eval): Track whether the line starts with a TAB.\nIf so then whenever we recognize a directive, emit a warning.\nRevert the previous change for this bug.\n(parse_var_assignment): Accept a file location if the line begins\nwith TAB; show a warning if we discover a directive.\n(conditional_line): Warn about lines starting with TAB.\n* tests/scripts/...: Add tests to verify warnings for initial TAB.\n"
    },
    {
      "commit": "fdcaaed8d7c1a2c749d3bdb96689e3d4c904049a",
      "tree": "fa5ec75f676631015deab31e96060818a08c56e1",
      "parents": [
        "e7a95089c8a1b4a424e9383b3dcc2b416feb0e4c"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 24 14:29:11 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 24 14:29:11 2025 -0400"
      },
      "message": "* tests/scripts/*: Switch TAB chars to #TAB# markup\n\nAvoid Emacs local variable settings to disable whitespace cleanup,\nby creating markup tokens for TAB characters (#TAB#) and space\ncharacters (#SPACE#) (for end-of-line spaces).  Modify all the\ntests that use TABs to use the new markup.  This requires changing\nsome old-fashioned tests to use the modern run_make_test().  Also\nremove some of the comments regarding test numbers now that the\nframework keeps track.\n"
    },
    {
      "commit": "e7a95089c8a1b4a424e9383b3dcc2b416feb0e4c",
      "tree": "436639400d37018c3c315eb28f78001e92eb3565",
      "parents": [
        "622a379126c9b2bca953a71c9eaa45f5ae36703d"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Aug 23 20:11:23 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Aug 23 20:11:23 2025 -0400"
      },
      "message": "* all: Update copyright year to 2025\n"
    },
    {
      "commit": "622a379126c9b2bca953a71c9eaa45f5ae36703d",
      "tree": "5f7fa426f59ad0997884786c241b2bb155cd592c",
      "parents": [
        "7198a4fe3f3926c5caedebdfd54f7960a6d5135a"
      ],
      "author": {
        "name": "Ingo Rohloff",
        "email": "ingo.rohloff@lauterbach.co",
        "time": "Sat Aug 23 19:44:04 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Aug 23 19:44:04 2025 -0400"
      },
      "message": "* doc/make.texi: [SV 67428] Clarify $(findstring ...) docs\n"
    },
    {
      "commit": "7198a4fe3f3926c5caedebdfd54f7960a6d5135a",
      "tree": "15eaca41d9f113bf6398d1ba4c2ab08c2f159850",
      "parents": [
        "cf6e11c2f5f805742eade95d28fb243cf947ef1d"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Aug 23 08:08:47 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Aug 23 08:08:47 2025 -0400"
      },
      "message": "* doc/make.1: [SV 67391] Correct -d and --debug options\n"
    },
    {
      "commit": "cf6e11c2f5f805742eade95d28fb243cf947ef1d",
      "tree": "57c13129de0265c6708d80f07f6566c829392800",
      "parents": [
        "63961d5d0905f69c59b44652fd33ac932f7d1c23"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Aug 21 16:51:36 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Aug 21 16:51:36 2025 -0400"
      },
      "message": "* all: Sanitize include file order for source files.\n\nAvoid warnings due to use of unreserved symbols in system headers\n(primarily on Windows) by using this order of #include in .c files:\n- First include makeint.h\n- Next include the header for this .c file (if one exists)\n- Next include all system header files\n- Lastly include any other GNU Make headers, in alphabetical order\n"
    },
    {
      "commit": "63961d5d0905f69c59b44652fd33ac932f7d1c23",
      "tree": "c1f5356851e791b283a6bb9e120d5edef54a1277",
      "parents": [
        "77164d97395590d363957315550ce7b9e7097f36"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Aug 21 08:17:24 2025 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Aug 21 09:09:06 2025 -0400"
      },
      "message": "* makeint.h (streq, patheq): Avoid pointer comparisons\n\nSome compilers will warn about this and I doubt it provides much\nbenefit.\n"
    },
    {
      "commit": "77164d97395590d363957315550ce7b9e7097f36",
      "tree": "06eaf3f26c3479d1e113a0a5b667ef86ad250ee7",
      "parents": [
        "d523661ce21a16535d53fe56a3d3d8824432e18e"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Jan 01 20:15:04 2025 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Aug 20 16:27:12 2025 -0400"
      },
      "message": "* bootstrap.conf: Update to gnulib 202507\n"
    },
    {
      "commit": "d523661ce21a16535d53fe56a3d3d8824432e18e",
      "tree": "7432c6e64035f250d9a8074b0379d8885c36dc5b",
      "parents": [
        "f12a4fddce3f0475a114505a373374cf20f387e8"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 08 16:31:54 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 08 23:30:37 2024 -0500"
      },
      "message": "[SV 66499] Detect jobserver values that are too large\n\nSet the jobserver pipe to non-blocking before writing tokens; if a\ntoken write fails the user\u0027s jobserver value is too large so fail.\n\nOriginal implementation: Dmitry Goncharov \u003cdgoncharov@users.sf.net\u003e\n\n* src/posixos.c (set_blocking): Split into force_blocking() which\nalways enables/disables blocking; set_blocking() may call it.\n(jobserver_setup): Set the write side of the pipe to non-blocking\nbefore writing tokens.  If it fails with EAGAIN we know the pipe\nis full: create a fatal error.\n* tests/scripts/features/jobserver: Test a too-large jobserver.\n"
    },
    {
      "commit": "f12a4fddce3f0475a114505a373374cf20f387e8",
      "tree": "a79c61b7e437756c29079710c621295cd5f9143f",
      "parents": [
        "186522e480c42df9be4f4f7f4b12ee33b656782c"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 08 16:27:06 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 08 23:30:37 2024 -0500"
      },
      "message": "jobserver: Ensure the named pipe is deleted on error\n\nMake sure the jobserver named pipe is deleted even if the\njobserver_setup() function calls fatal() and exits early.\n\n* src/main.c (clean_jobserver): Always reset_jobserver().\n* src/posixos.c (jobserver_setup): Set job_root up front.\n* tests/test_driver.pl: Print out the logfile pathname on error.\nFor tests with regex matches this might be the only file available.\nDon\u0027t print the base filename unless one is created.\n"
    },
    {
      "commit": "186522e480c42df9be4f4f7f4b12ee33b656782c",
      "tree": "800828dd8efefb20242f9415f82266ab037f4bbc",
      "parents": [
        "aa8626ce09317151f59490ebd5673afdedb3e1f2"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Oct 12 16:15:28 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 08 23:30:00 2024 -0500"
      },
      "message": "* doc/make.texi: [SV 66324] Fix a typo\n"
    },
    {
      "commit": "aa8626ce09317151f59490ebd5673afdedb3e1f2",
      "tree": "940c1b0eb3bddfb63c4efacc0b422b512ec2760d",
      "parents": [
        "93704dd565e12a81f44ad4e98abfbef82227f63e"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Tue Oct 01 22:27:25 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Oct 01 22:27:25 2024 -0400"
      },
      "message": "[SV 66273] Double-colon targets must not be intermediate\n\nAn explicitly mentioned double-colon target cannot be intermediate.\n\n* src/read.c (record_files): Set file-\u003eis_explicit in the case of an\nexplicitly mentioned file built by a double colon rule.\n* src/file.c (print_file): Have print_file print whether a file is\nexplicitly mentioned.\n* tests/scripts/features/patternrules: Add tests.\n"
    },
    {
      "commit": "93704dd565e12a81f44ad4e98abfbef82227f63e",
      "tree": "1828afa916f33138a1fa2e0dfb642c4fbf8f9c12",
      "parents": [
        "101bf5636f416ce7b4d97597348906be2c30ff87"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Tue Oct 01 22:14:31 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Oct 01 22:14:31 2024 -0400"
      },
      "message": "[SV 66268] Include newlines in file removal error message\n\n* src/file.c (remove_intermediates): Fix an error message about a\nfailure to remove an intermediate file.\n* tests/scripts/features/patternrules: Add tests.\n"
    },
    {
      "commit": "101bf5636f416ce7b4d97597348906be2c30ff87",
      "tree": "d41481069863c29bcc54dbd7773fe81e3c2875e7",
      "parents": [
        "9251546bac031db325da80c4a8429db67c5578f7"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 16:23:36 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 16:23:36 2024 -0400"
      },
      "message": "* doc/make.texi: Clarify -j versus -jN behavior\n"
    },
    {
      "commit": "9251546bac031db325da80c4a8429db67c5578f7",
      "tree": "1bb66c160c32f639de5e772b3c49c9008e6b99e5",
      "parents": [
        "7dc23aff3001d22384caef9a1197f970c5f0b845"
      ],
      "author": {
        "name": "Sergei Trofimovich",
        "email": "siarheit@google.com",
        "time": "Tue Jun 18 22:37:54 2024 +0100"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 15:11:36 2024 -0400"
      },
      "message": "Fix biased shuffle by avoiding already \"struck\" elements\n\nArtem Klimov noticed that current shuffle implementation suffers from\nprobability bias due to a typical bug in the shuffling implementation.\n\nWhen we consider already shuffled element we slightly bias their\npropability.\n\nhttps://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\nsuggests shuffling each \"struck\" element only once.\n\nBefore the change probabilities of 4-element array to land from `i`\nindex to `j` index are:\n\n          0     1     2     3\n      _____ _____ _____ _____\n  0 | 25.00 29.30 24.60 21.10\n  1 | 25.00 22.25 28.13 24.63\n  2 | 25.00 23.44 22.26 29.30\n  3 | 25.00 25.01 25.01 24.98\n\nNote that `0-\u003e1` probability is almost 29% while `0-\u003e3` os only 21%.\n\nAfter the change probabilities are not as biased:\n\n          0     1     2     3\n      _____ _____ _____ _____\n  0 | 24.99 24.99 25.01 25.01\n  1 | 24.99 25.04 24.99 24.99\n  2 | 25.01 25.00 25.00 24.99\n  3 | 25.01 24.98 25.00 25.01\n\n* src/shuffle.c (random_shuffle_array): Fix biased shuffle by avoiding\nalready \"struck\" elements.\n"
    },
    {
      "commit": "7dc23aff3001d22384caef9a1197f970c5f0b845",
      "tree": "c643b9508544c45cdb89492884cc730c1d1585a0",
      "parents": [
        "0267eb64fa88a9de75da80d97a55f0beb1bc50e3"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:53:44 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:54:23 2024 -0400"
      },
      "message": "* doc/make.texi: GNUMAKEFLAGS is only read from the environment\n"
    },
    {
      "commit": "0267eb64fa88a9de75da80d97a55f0beb1bc50e3",
      "tree": "326c85e39450e7a88cbd2195220064cefc367b56",
      "parents": [
        "bba4427b5dfba7f9cdab8fa2cac1399fceda3058"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Mon Aug 05 01:39:18 2024 -0700"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:43:24 2024 -0400"
      },
      "message": "Check for snprintf truncation on W32\n\n* src/main.c (find_and_set_default_shell) [MK_OS_W32]:\nDo not use a buffer that snprintf truncated.\n"
    },
    {
      "commit": "bba4427b5dfba7f9cdab8fa2cac1399fceda3058",
      "tree": "43623fe5090e30a8aa205bb428ac46562abf2ce1",
      "parents": [
        "c23a7e623209dae6fb36366c2e717690c9bfa042"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Mon Aug 05 01:30:44 2024 -0700"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:43:24 2024 -0400"
      },
      "message": "Fix unlikely pointer overflow in abspath\n\n* src/function.c (abspath): len is now ptrdiff_t,\nto avoid GCC warning about comparing signed to unsigned.\nIt really is a pointer difference, after all.\nRejigger comparision to avoid undefined behavior\nif dest + len is an invalid pointer.\n"
    },
    {
      "commit": "c23a7e623209dae6fb36366c2e717690c9bfa042",
      "tree": "96b4062a7cc33053fe3f9631de1b9f29dfe1b641",
      "parents": [
        "4d3bf7838f555f4da67c59f3b302750ac3a87ae8"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Mon Aug 05 01:21:09 2024 -0700"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:43:24 2024 -0400"
      },
      "message": "Prefer memcpy to strncpy if either will do\n\nstrncpy is trickier and a bit slower.\n* src/function.c (func_realpath, func_abspath):\n* src/misc.c (xstrndup):\nPrefer memcpy or mempcpy to strncpy when the source length is known.\n"
    },
    {
      "commit": "4d3bf7838f555f4da67c59f3b302750ac3a87ae8",
      "tree": "e5af04fc53dd4ddf1934645c7b3b2a3069e99b65",
      "parents": [
        "8c8c7fc2269df027d1591a6e4a4873f773a2d53f"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Mon Aug 05 01:04:13 2024 -0700"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:43:24 2024 -0400"
      },
      "message": "Omit unused PATH_MAX code\n\n* src/makeint.h (GET_PATH_MAX, PATH_VAR):\nSimplify, since PATH_MAX is always defined here.\n(NEED_GET_PATH_MAX): Remove.\n* src/misc.c (get_path_max) [NEED_GET_PATH_MAX]: Remove.\n"
    },
    {
      "commit": "8c8c7fc2269df027d1591a6e4a4873f773a2d53f",
      "tree": "5e3b08b47155537a2b22075e459c8cbaf5b55689",
      "parents": [
        "9fee98f8436a21a1332b6e849259c88a322dcff1"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Mon Aug 05 00:44:28 2024 -0700"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 14:43:24 2024 -0400"
      },
      "message": "Avoid strlen calls after sprintf\n\n* src/file.c (file_timestamp_sprintf):\n* src/function.c (func_words, func_call):\n* src/job.c (child_error):\n* src/main.c (define_makeflags):\n* src/output.c (message, error, fatal):\nUse return value from sprintf instead of calling strlen\non the resulting buffer.\n"
    },
    {
      "commit": "9fee98f8436a21a1332b6e849259c88a322dcff1",
      "tree": "185564577432e178dfb85dd27f381bfb796666ce",
      "parents": [
        "f800f8bae35e26475956c715efcad24f64b969d9"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 12:35:58 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 13:48:41 2024 -0400"
      },
      "message": "[SV 65759] Document special handling of \"-\" command line option\n\n* doc/make.1: Add information on \"-\" option handling.\n* doc/make.texi: Ditto.\n"
    },
    {
      "commit": "f800f8bae35e26475956c715efcad24f64b969d9",
      "tree": "ae79eb3d210a3f10c99ba3fa87a29d9165c60180",
      "parents": [
        "39a4c8106297632831f642267d0f3b80bb5dae3b"
      ],
      "author": {
        "name": "Dan D",
        "email": "bulk88@hotmail.com",
        "time": "Mon Sep 02 09:54:17 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Sep 02 13:48:30 2024 -0400"
      },
      "message": "[SV 65777] Add more const\n\nAdd more const to static arrays.  On some systems this allows more\ndata to be placed in RO segments and shared between multiple\ninstances of the make executable.  Anyway more const is good hygiene.\n\n* src/default.c: Add const to arrays.\n* src/function.c: Ditto.\n* src/hash.c: Ditto.\n* src/hash.h: Ditto.\n* src/job.c: Ditto.\n* src/read.c: Ditto.\n* src/remake.c: Ditto.\n* src/rule.c: Ditto.\n* src/rule.h: Ditto.\n"
    },
    {
      "commit": "39a4c8106297632831f642267d0f3b80bb5dae3b",
      "tree": "108977558346ad5d8c97ac1e9e265a409d6a7395",
      "parents": [
        "d97e048b08707a2918c13d314a61357a649be9d7"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Sep 01 21:12:37 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Sep 01 21:12:37 2024 -0400"
      },
      "message": "Remove obsolete email address for the FSF\n\n* doc/make.texi: Use the newer email address in the manual.\n* gl/lib/fnmatch.c: Use a URL instead of a street address.\n* gl/lib/fnmatch.in.h: Ditto.\n* gl/lib/glob.c: Ditto.\n* gl/lib/glob.in.h: Ditto.\n"
    },
    {
      "commit": "d97e048b08707a2918c13d314a61357a649be9d7",
      "tree": "e8e81e9f67f619e217968ab6a542c8f663d85524",
      "parents": [
        "c63a5bc6a2881d515bb3020ed477fcba08fb2f3d"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Sep 01 21:09:42 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Sep 01 21:09:42 2024 -0400"
      },
      "message": "* bootstrap.conf: Update to newer prerequisites\n"
    },
    {
      "commit": "c63a5bc6a2881d515bb3020ed477fcba08fb2f3d",
      "tree": "bad0c7232ad1d2590fe9017e462376e9a48e8515",
      "parents": [
        "bc979e49491b03c9d5d82396f3124b30efae3a8b"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 23:48:51 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 23:53:26 2024 -0400"
      },
      "message": "[SV 65917] Mark also_make targets as updated in make -n\n\nSuggested patch by Hannes Domani \u003cssbssa@yahoo.de\u003e\n\n* src/remake.c (notice_finished_file): When run with -n, mark\nalso_make targets as updated.\n* tests/scripts/options/dash-n: Test pattern and grouped targets.\n"
    },
    {
      "commit": "bc979e49491b03c9d5d82396f3124b30efae3a8b",
      "tree": "f3adce9bf95597a5283307f726013d52b9309064",
      "parents": [
        "6970561de07e071b85f0681062756f316eead29b"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 17:16:23 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 17:16:23 2024 -0400"
      },
      "message": "* src/job.c (new_job): [SV-66030] Show all also-make targets\n"
    },
    {
      "commit": "6970561de07e071b85f0681062756f316eead29b",
      "tree": "216157bd395fcb4a372f5585ddac2522f518c043",
      "parents": [
        "f0db5e321faf654df6f21e54b5b0ed509e18340c"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 17:13:07 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 17:13:07 2024 -0400"
      },
      "message": "Don\u0027t add a target to its own also_make list\n\n* src/dep.h (copy_dep): Make a copy of one struct dep.\n* src/misc.c (copy_dep): Implement the new function.\n(copy_dep_chain): Call copy_dep() for each dep in the chain.\n* src/read.c (record_files): Write our own copy loop and omit the\ncurrent file from its own also_make list.  Since we don\u0027t keep\nthe function\u0027s also_make, free it.\n"
    },
    {
      "commit": "f0db5e321faf654df6f21e54b5b0ed509e18340c",
      "tree": "d488e36f257835db61a546cb4ea090d144a7d94b",
      "parents": [
        "8653c25fcf8e4a025540f3129ac3a16ba7424e26"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 16:04:19 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 16:04:19 2024 -0400"
      },
      "message": "* doc/make.texi: [SV-65982] Clarify what --debug\u003dmakefile does\n"
    },
    {
      "commit": "8653c25fcf8e4a025540f3129ac3a16ba7424e26",
      "tree": "6c938da4572fdf20c81e940a94a15db2340dc06e",
      "parents": [
        "4d883c414dcf6aafc66e3cd3b6faffc300fb4771"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 15:59:58 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 16:02:19 2024 -0400"
      },
      "message": "* src/remake.c (update_file_1): [SV 65999] Clarify debug output\n"
    },
    {
      "commit": "4d883c414dcf6aafc66e3cd3b6faffc300fb4771",
      "tree": "6e6f2bb21e73b9810339b80524829e2b81c51832",
      "parents": [
        "034f8623610a139010ee451d0ae81689c064209c"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 15:45:55 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 16:02:19 2024 -0400"
      },
      "message": "* doc/make.texi: [SV-66018] Mention .ONESHELL in [-+@] docs\n"
    },
    {
      "commit": "034f8623610a139010ee451d0ae81689c064209c",
      "tree": "0a99b624557233263bb895b88160c66444e58f59",
      "parents": [
        "49b955a50d49aa07f5929b9b4aa54f3b5910e992"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Aug 04 15:13:44 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 16:00:48 2024 -0400"
      },
      "message": "[SV 66037] Avoid hang/crash from MAKEFLAGS\u003d... on command line\n\nMake enters an infinite loop when some option and MAKEFLAGS\u003d\u003cvalue\u003e\nare specified on the command line.  For example,\n    $ make -r MAKEFLAGS\u003dhello\u003dworld\n\nIf decode_switches() runs handle_non_switch_argument() from within\nthe getopt() loop, it would recursively call decode_switches() to\nenter a new getopt() loop, corrupting the state of the outer loop.\n\n* src/main.c (decode_switches): Save up non-option arguments and run\nhandle_non_switch_argument() only after we\u0027re done with getopt().\n* tests/scripts/variables/MAKEFLAGS: Add tests.\n"
    },
    {
      "commit": "49b955a50d49aa07f5929b9b4aa54f3b5910e992",
      "tree": "aef619379177834f38c23ad0a5d92b5f0710b02f",
      "parents": [
        "69038e62e0f0139889c8e6621f13ff08227be56c"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Jun 19 14:03:40 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 15:21:59 2024 -0400"
      },
      "message": "* doc/make.texi (Overview): Update reference to POSIX.1-2024\n"
    },
    {
      "commit": "69038e62e0f0139889c8e6621f13ff08227be56c",
      "tree": "158e954125bd71ba3bfef19766adfb809e628965",
      "parents": [
        "a9e3eb1eecb595320147884af08fe95be546af33"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun May 19 19:10:32 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 15:21:59 2024 -0400"
      },
      "message": "* src/warning.h: Put warnings into alphabetical order.\n\n* src/warning.c: Ditto.\n* tests/scripts/options/warn: Fix tests for the new order.\n"
    },
    {
      "commit": "a9e3eb1eecb595320147884af08fe95be546af33",
      "tree": "5e6b6c1e84d908d785e40b1409e99bfc00fe29ea",
      "parents": [
        "e3f938caf893f485c9216e26a4f48731fccc43a8"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun May 19 18:56:12 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Aug 04 15:21:59 2024 -0400"
      },
      "message": "[SV 65739] Add warning circular-dep.\n\nAdd a warning to control circular dependency detection.  Use \"warn\" as\nthe default action to be backward-compatible.\n\n* src/warning.h (enum warning_type): Add warning type wt_circular_dep.\n* src/warning.c (warn_init): Set default wt_circular_dep to w_warn.\n* src/remake.c (update_file_1): Consult the circular-dep warning to\nhandle circular dependencies.\n* tests/scripts/options/warn: Test --warn circular-dep flag.\n* tests/scripts/variables/WARNINGS: Test .WARNINGS circular-dep flag.\n* doc/make.texi: Document circular-dep warning.\n* doc/make.1: Ditto.\n"
    },
    {
      "commit": "e3f938caf893f485c9216e26a4f48731fccc43a8",
      "tree": "bfe4fed9c664041b392eb11b5f8e27d19bade75e",
      "parents": [
        "40664fef1fa079280487500d6c347472bd2961d5"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Apr 21 13:35:33 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon May 06 14:11:17 2024 -0400"
      },
      "message": "* tests/scripts/functions/shell: [SV 65323] Run huge var test in bash\n\nThe long variable name causes ksh to crash.  Some systems use ksh as\n/bin/sh, so force bash if it\u0027s available else skip the test.\n"
    },
    {
      "commit": "40664fef1fa079280487500d6c347472bd2961d5",
      "tree": "97816d3aa449113ba5b9110ba76b046cc8a29041",
      "parents": [
        "f7985ab827f64c0d474ed38260169e8bdd2feab8"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Apr 21 13:34:12 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon May 06 14:11:17 2024 -0400"
      },
      "message": "[SV 65324] disable_builtins: Don\u0027t dereference NULL suffix_file\n\nMake crashes when -r and MAKEFLAGS\u003d are specified on the command line.\n\nOn startup make begins to process command line arguments.\nDuring processing of \"MAKEFLAGS\u003d\" make calls reset_makeflags, which in\nturn calls disable_builtins, which dereferences null suffix_file.\nHere is the backtrace.\n\n0 disable_builtins main.c:3482\n1 reset_makeflags main.c:3104\n2 set_special_var variable.c:1325\n3 do_variable_definition variable.c:1693\n4 try_variable_definition variable.c:1889\n5 handle_non_switch_argument main.c:3021\n6 decode_switches main.c:3150\n7 main main.c:1621\n\n* src/main.c (disable_builtins): Avoid dereferencing null suffix_file.\n* tests/scripts/features/suffixrules: Add a test.\n"
    },
    {
      "commit": "f7985ab827f64c0d474ed38260169e8bdd2feab8",
      "tree": "bc61c39a795aba0b160041cd5f382232d09fd1e5",
      "parents": [
        "8339232a2feaffa9a8e8982202b069398f90f71d"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 21 12:42:55 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon May 06 14:11:17 2024 -0400"
      },
      "message": "* make.texi (How to Use Variables): [SV 65536] Rewrite this chapter\n\nRe-reading this chapter I decided it was time to introduce a complete\nrewrite, of at least parts of this.  Much of the enhancements added\nover the years were in the wrong place or not clear.\n"
    },
    {
      "commit": "8339232a2feaffa9a8e8982202b069398f90f71d",
      "tree": "a4a00c887ed551a9f574407d3572ffae24b6ec71",
      "parents": [
        "949952258e7ceba87150e1982f3c8a26e21be6be"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:51:23 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:51:23 2024 -0400"
      },
      "message": "* .dir-locals.el: Correct bug reference regex format\n"
    },
    {
      "commit": "949952258e7ceba87150e1982f3c8a26e21be6be",
      "tree": "b9a801ad895edb0dbeb7e7a506c971b988610ca9",
      "parents": [
        "479c54f6ed4dfd9a866de84ecce581c2b79de1ea"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:27:37 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:27:37 2024 -0400"
      },
      "message": "[SV 65537] Update to newer gnulib\n\n* bootstrap.conf: Switch to gnulib stable-202401 branch.\n* maintMakefile: Support an EXTRA_CFLAGS variable in maintainer mode.\n* README.git: Describe how to use it.\n"
    },
    {
      "commit": "479c54f6ed4dfd9a866de84ecce581c2b79de1ea",
      "tree": "bd1844ec2a9a03656e586aede2c926b662f133d5",
      "parents": [
        "033330e34c25b507359299272e567065182addad"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:27:12 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Apr 14 15:27:12 2024 -0400"
      },
      "message": "* NEWS: Clean up UTF-8 issues\n"
    },
    {
      "commit": "033330e34c25b507359299272e567065182addad",
      "tree": "9d6547f51214a4112dbb2affc2c293539fe53f85",
      "parents": [
        "61ee4578f59e4478bf76fa584b199e1a22521cb0"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:08:20 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:14:25 2024 -0400"
      },
      "message": "* doc/make.texi (Pattern Rules): Clarify that rules must have recipes.\n"
    },
    {
      "commit": "61ee4578f59e4478bf76fa584b199e1a22521cb0",
      "tree": "68b52f05e6c78e0517eaf988d840b5c1636cdecf",
      "parents": [
        "f289ece6cf6188cc2be4273acf2ecf0394743fc5"
      ],
      "author": {
        "name": "Paul Eggert",
        "email": "eggert@cs.ucla.edu",
        "time": "Sun Jan 07 16:09:49 2024 -0800"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:08:13 2024 -0400"
      },
      "message": "* src/arscan.c (parse_int): Fix integer overflow test\n\nUse intprops.h macros rather than trying to detect integer overflow by\nhand, and doing it incorrectly.  Example of incorrect behavior:\nif val \u003d\u003d 3689348814741910323, base \u003d\u003d 10, UINTMAX_WIDTH \u003d\u003d 64, and\n *ptr \u003d\u003d \u00270\u0027 then (val*base)+(*ptr-\u00270\u0027) yields 18446744073709551614\nwhich is greater than val even though overflow has occurred.\nFortunately this bug could not be triggered on GNU/Linux hosts,\nalthough it may be possible on platforms (if any) where struct ar_hdr\nhas members so large that they can represent integers that do not fit\nint uintmax_t.\n"
    },
    {
      "commit": "f289ece6cf6188cc2be4273acf2ecf0394743fc5",
      "tree": "f5ccf17adeee13d50a118591eae00ba74955ebb8",
      "parents": [
        "d791fb4139894f79c6f997f035a03a051f75e720"
      ],
      "author": {
        "name": "KO Myung-Hun",
        "email": "komh78@gmail.com",
        "time": "Sun Mar 24 17:10:08 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:08:13 2024 -0400"
      },
      "message": "* src/makeint.h (JOBSERVER_USE_FIFO): Do not define on OS/2.\n\nmkfifo() on OS/2 is a dummy, it even returns a wrong value on error.\n"
    },
    {
      "commit": "d791fb4139894f79c6f997f035a03a051f75e720",
      "tree": "7ce5f7e39f8efbced3238506b816a3b2b99e1d99",
      "parents": [
        "0b91f42f58782779250590bad25a5beeef5e07ca"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:47:19 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:08:13 2024 -0400"
      },
      "message": "* src/variable.c (do_variable_definition) [W32]: Fix bad variable.\n"
    },
    {
      "commit": "0b91f42f58782779250590bad25a5beeef5e07ca",
      "tree": "63407ad46a01b268b6fd926bc6eee2f2dd71ab9e",
      "parents": [
        "882d59c67282400de2087b8bf853ca730e0fa492"
      ],
      "author": {
        "name": "Marco Sirabella",
        "email": "marco@sirabella.org",
        "time": "Sun Mar 24 16:41:13 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Mar 28 19:08:13 2024 -0400"
      },
      "message": "* src/arscan.c (ar_name_equal): Support GNU ar\u0027s -P option.\n"
    },
    {
      "commit": "882d59c67282400de2087b8bf853ca730e0fa492",
      "tree": "9aaaa744734fb31d9e626727c47ad788d390e507",
      "parents": [
        "5fc62f8295d23b4e45be738b4cf793f0199f6306"
      ],
      "author": {
        "name": "Marco Sirabella",
        "email": "marco@sirabella.org",
        "time": "Sun Mar 24 16:36:35 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:36:35 2024 -0400"
      },
      "message": "* tests/README: Fix sample run_make_tests command line.\n"
    },
    {
      "commit": "5fc62f8295d23b4e45be738b4cf793f0199f6306",
      "tree": "cb59872f1411e32ce317feca6fd25d079c9a36dd",
      "parents": [
        "3d4f3e0627887db1d2b6d86da1be2b9c8a8ed3a1"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:29:14 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:29:14 2024 -0400"
      },
      "message": "* doc/make.texi: GNU Make does set GNUMAKEFLAGS, to empty.\n"
    },
    {
      "commit": "3d4f3e0627887db1d2b6d86da1be2b9c8a8ed3a1",
      "tree": "a3a05bdfa0bc0bad865681e9262f1571e069b120",
      "parents": [
        "242603fa46bb68428d1bac66ded6fbf7ae8e2605"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:23:28 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 16:23:28 2024 -0400"
      },
      "message": "* doc/make.texi: Document temporary file name prefix\n\n* src/posixos.c (jobserver_setup): Set prefix for FIFO temp file.\nEnsure it can\u0027t conflict with a \"normal\" temp file.\n* src/w32/w32os.c (os_anontmp): Set prefix for anon temp files.\n"
    },
    {
      "commit": "242603fa46bb68428d1bac66ded6fbf7ae8e2605",
      "tree": "f2832f6dda5835c506bc0606353b3e4640e1fa34",
      "parents": [
        "b8a2a4424bb28c0c51e48b17f48d211d622b363f"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 15:19:11 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 15:25:53 2024 -0400"
      },
      "message": "[SV 65268] Un-set append mode for stdout/stderr on exit\n\nIt turns out that options set on stdout/stderr last after exit.\nLeaving append-mode enabled can break other facilities, so reset the\nflags on stdout/stderr before we exit.\n\n* src/os.h: Add a new fd_reset_append() to reset flags on FDs.\nModify fd_set_append() to return the old flags.\n* src/posixos.c (fd_reset_append): Set provided flags on the FD.\n(fd_set_append): Return the previous flags set on the FD.\n* src/output.c (output_init): Preserve old flags for stdout/stderr.\n(output_close): Reset flags for stdout/stderr.\n* src/w32/w32os.c: Implement dummy methods.\n"
    },
    {
      "commit": "b8a2a4424bb28c0c51e48b17f48d211d622b363f",
      "tree": "10f5b8e8266bc7b17dce93e3c56c018303ffc79f",
      "parents": [
        "bfbf169b63dcfdc734b3c3187c903e361d702b1a"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 14:19:23 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 15:25:18 2024 -0400"
      },
      "message": "[SV 65273] configure.ac: Remove check for sys/timeb.h\n\nGNU Make doesn\u0027t use ftime(); we only checked for this to work around\nan error in the completely obsolete SCO 3.2 system.  Since ftime() is\ndeprecated, including sys/timeb.h has started throwing warnings on\nnewer systems so just remove it completely.\nReported by: Collin Funk \u003ccollin.funk1@gmail.com\u003e\n\n* configure.ac: Remove the check for sys/timeb.h.\n* src/makeint.h: Remove the include of sys/timeb.h.\n* src/config.h-vms: Don\u0027t define HAVE_SYS_TIMEB_H.\n* src/config.h.W32: Ditto.\n"
    },
    {
      "commit": "bfbf169b63dcfdc734b3c3187c903e361d702b1a",
      "tree": "e9b46aa909842c4d39daec424e2563b2adbfb499",
      "parents": [
        "21a538ce8f4daabc12f542c91e7da5d2d7b870ca"
      ],
      "author": {
        "name": "Jouke Witteveen",
        "email": "j.witteveen@gmail.com",
        "time": "Sun Mar 24 14:08:59 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 14:08:59 2024 -0400"
      },
      "message": "[SV 65448] intcmp: Compare values instead of magnitudes\n\n* src/function.c (func_intcmp): Reverse comparison direction when\nboth arguments are negative.\n* tests/scripts/functions/intcmp: Add tests and remove useless ones.\n"
    },
    {
      "commit": "21a538ce8f4daabc12f542c91e7da5d2d7b870ca",
      "tree": "bb07a3e785a797cde73268f8f2db5d69c2570bd8",
      "parents": [
        "3176b60566615074a4d143cdcdc55fc95f183d6a"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 14:05:45 2024 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Mar 24 14:05:45 2024 -0400"
      },
      "message": "[SV 65359] doc/make.texi: Describe invalid export variable names\n"
    },
    {
      "commit": "3176b60566615074a4d143cdcdc55fc95f183d6a",
      "tree": "788352109c240ad945998a59acbc4790562c6fc9",
      "parents": [
        "07187db947ba25e6c59b55f10660a04f8e9c5229"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 19:41:50 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 19:41:50 2024 -0500"
      },
      "message": "[SV 64085] Handle .POSIX plus .IGNORE correctly\n\nPOSIX requires that a conforming makefile should not use -e if\n 1) make is invoked with -i\n 2) A .IGNORE target exists with no prerequisites\n 3) The current target is a prerequisite of .IGNORE\n\n* src/job.c (start_job_command): Add the target\u0027s flags when\nconstructing argv so it can check (3) above.\n(construct_command_argv_internal): Don\u0027t set shellflags if it\u0027s not\nset: this only happens if we\u0027re parsing for the slow path and we\ndon\u0027t need them.\n(construct_command_argv): Don\u0027t allocate buffers if not needed.\nWhen detecting \"-ec\", check the global ignore_errors_flag and the\ncurrent command line flags.\n* tests/scripts/targets/IGNORE: Add tests for .IGNORE.\n* tests/scripts/targets/POSIX: Add tests for the three cases above.\n"
    },
    {
      "commit": "07187db947ba25e6c59b55f10660a04f8e9c5229",
      "tree": "1b7b4aac9190689756bbfbe325644fcdeed08cdd",
      "parents": [
        "a493d9ab6cd2fbfa2ec83b35f52f486b56621779"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Feb 04 13:04:05 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 18:26:21 2024 -0500"
      },
      "message": "[SV 64822, SV 36486] Fix appending to a pattern specific variable\n\nAppending to a pattern specific variable produces an incorrect value\nin the presence of a command line definition or an env override of\nthe variable.  Also, fix pattern/target-specific appending to a\nvariable with origin override.\n\n* At parse time record_target_var sets the value of a pattern\n  specific variable to the value defined on command line or to the\n  value of the env override.\n* Later, at build time, recursively_expand_for_file appends this\n  value of the variable (set in record_target_var) to the command\n  line value again, regardless of the origin of the variable.\n\nThis patch modifies recursively_expand_for_file to avoid appending,\nunless the origin of the variable beats or equals the origin of one\nof the parent definitions of this variable.\n\nReported by Rob \u003crobw9739@gmail.com\u003e,\nBrian Vandenberg \u003cphantall@gmail.com\u003e,\nMarkus Oberhumer \u003cmarkus@oberhumer.com\u003e.\n\n* NEWS: Note the change.\n* src/variable.c (do_variable_definition): Avoid merging a\npattern-specific variable with the parent definition when a command\nline or env override is present.\n* src/expand.c (recursively_expand_for_file): Avoid appending to a\npattern-specific variable, unless the origin of this pattern-specific\nvariable beats or equals the origin of one of the parent definitions\nof this variable.\n* doc/make.texi (Override Directive): Add missing cross-reference.\n* tests/scripts/variables/append: Add tests.\n"
    },
    {
      "commit": "a493d9ab6cd2fbfa2ec83b35f52f486b56621779",
      "tree": "2f7d04ca05feb66b9be228a9d0a37f236d87b949",
      "parents": [
        "a382ac6cd17eedf535407d29bcfc3cef04bbc3bc"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 11:31:19 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 11:34:49 2024 -0500"
      },
      "message": "* NEWS: Clean up\n"
    },
    {
      "commit": "a382ac6cd17eedf535407d29bcfc3cef04bbc3bc",
      "tree": "9b4a582ae300bf902db65207ec6773c6918275b4",
      "parents": [
        "63b602e74f8e2235191d7dee4dd05f82b1869fdb"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Feb 04 11:16:40 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 11:34:49 2024 -0500"
      },
      "message": "[SV 64803] Set origin for unmodified variables after -e\n\nEnsure the origin of all variables inherited from the environment is\n\"environment override\" if -e is given.  Previously only variables\nthat were set in the makefile had this origin.\n\nPDS: Most of these changes are from Dmitry but I slightly modified\nthe algorithm: instead of rearranging the way in which MAKEFLAGS is\nparsed we reset the env_override value to the default before we\nre-parse MAKEFLAGS, then we set the origin of all env vars to the\ncorrect value based on the new setting.\n\n* NEWS: Mention the change for backward-compatibility.\n* src/main.c (main): Ensure MAKEFLAGS is always marked special.\n(reset_makeflags): Set env_overrides back to default before parsing\nMAKEFLAGS.\n(decode_switches): Call reset_env_override() to check for changes.\n* src/variable.h (reset_env_override): Declare a new function.\n* src/variable.c (reset_env_override): Go through all env variables\nand ensure the origin is correct based on env_overrides.\n(set_env_override): Helper function for the hash.\n* tests/scripts/functions/foreach: Fix tests.\n* tests/scripts/functions/let: Ditto.\n* tests/scripts/functions/origin: Ditto.\n* tests/scripts/options/dash-e: Add tests.\n"
    },
    {
      "commit": "63b602e74f8e2235191d7dee4dd05f82b1869fdb",
      "tree": "f31bc6e7566a7efed2808a279c98eb6eb7495e5a",
      "parents": [
        "ec348f51d0240ebc64d11c77c461e89c4a8dfed7"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 09:47:36 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 11:34:49 2024 -0500"
      },
      "message": "* tests/test_driver.pl: Add cd to the .run output file\n"
    },
    {
      "commit": "ec348f51d0240ebc64d11c77c461e89c4a8dfed7",
      "tree": "14fca725077dda855ca87314bc3d45e566b30beb",
      "parents": [
        "51e56a028e64ed15326ccb986f7f7588268b0002"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sun Jan 28 14:46:55 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Feb 04 11:32:50 2024 -0500"
      },
      "message": "Replace target_var boolean with enum variable_scope\n\nReplace the target_var boolean with an enum to distinguish between\nglobal, target-specific, and pattern-specific variables when defining.\n\n* src/variable.h (enum variable_scope): Introduce enum variable_scope.\nReplace parameter target_var of type int with enum variable_scope.\n* src/load.c (load_file): Ditto.\n* src/main.c (handle_non_switch_argument): Ditto.\n* src/read.c (eval_makefile): Ditto.\n(eval): Ditto.\n(do_define): Ditto.\n(record_target_var): Ditto.\n(construct_include_path): Ditto.\n* src/variable.c (initialize_file_variables): Ditto.\n(shell_result): Ditto.\n(try_variable_definition): Ditto.\n(do_variable_definition): Ditto.\n"
    },
    {
      "commit": "51e56a028e64ed15326ccb986f7f7588268b0002",
      "tree": "1c1f9329eedfab10df2031d2d544ae0d578e1f92",
      "parents": [
        "1eff20f6f64d00f588c218e265f8d3a81a8fb00b"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 17:14:53 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 28 14:21:00 2024 -0500"
      },
      "message": "* doc/make.texi: Grammar improvements.\n\nReported-by: David Apps \u003cdavidapps3+gnu@gmail.com\u003e\n"
    },
    {
      "commit": "1eff20f6f64d00f588c218e265f8d3a81a8fb00b",
      "tree": "24a030c60a9b94f6497f6c290b2dacc39b458f9f",
      "parents": [
        "82708b3a3a7114c6cd11a11e525a8d33118dbf61"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Jan 11 10:05:27 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 28 14:20:47 2024 -0500"
      },
      "message": "Support conditional modifiers on all assignment operators\n\nRework the single \"?\u003d\" operator to instead allow a \"?\" modifier to be\nprepended to ANY assignment operator.  If \"?\" is given then the\nvariable is assigned (using whatever operator comes next) if and only\nif the variable is not already defined.  If it is defined then no\naction is taken (the right-hand side is not expanded, etc.)\n\n* NEWS: Announce this new feature.\n* doc/make.texi: Modify the documentation around assignment operators.\n* src/variable.h: Remove the f_conditional variable flavor.\n(do_variable_definition): Add an argument specifying conditional.\n* src/variable.c (parse_variable_definition): Use the existing flag\n\"conditional\" to remember if we saw \"?\" rather than the flavor.\nWhen we see \"?\" skip it and continue trying to parse an assignment.\n(try_variable_definition): Pass condition to do_variable_definition().\n(initialize_file_variables): Ditto.\n(do_variable_definition): Check for conditional up-front: quit if set.\nRemove handling of obsolete f_conditional flavor.\n* src/read.c (eval_makefile): MAKEFILE_LIST is not conditional.\n(do_define): Unset conditional for define with no operator.  Pass the\nconditional flag to do_variable_definition().\n(construct_include_path): .INCLUDE_DIRS is not conditional.\n* src/load.c (load_file): .LOADED is not conditional.\n* tests/scripts/variables/conditional: Add new tests.\n"
    },
    {
      "commit": "82708b3a3a7114c6cd11a11e525a8d33118dbf61",
      "tree": "a128cc5031c1f25828ab55b03e6c5aa3632afc1c",
      "parents": [
        "828906b6dcc85e2c7fa663435571ac73a97b52cc"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Jan 10 23:53:05 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 16:40:36 2024 -0500"
      },
      "message": "Remove unnecessary parsing during makefile read\n\n* src/read.c (make_word_type): Remove w_varassign from the enum.\n(get_next_mword): This function is never called on a string in a place\nwhere we might find a variable assignment.  Any variable assignments\nhave already been handled via try_variable_definition(), so we don\u0027t\nneed to check for them here.\n* tests/scripts/variables/flavors: Check triple-colon assignment in\ntarget-specific variables.\n"
    },
    {
      "commit": "828906b6dcc85e2c7fa663435571ac73a97b52cc",
      "tree": "e5630240d8d22459d3142c52bea06055ea9c716d",
      "parents": [
        "b9369709565bf4ba31e5f272b48bd199024c44e6"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Wed Jan 10 00:01:33 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 16:40:36 2024 -0500"
      },
      "message": "Create a common method for skipping variable references\n\n* README.git: Add some notes about using ASAN.\n* src/makeint.h: Declare skip_references().\n* src/misc.c (skip_reference): A new function that will skip over a\nvariable reference, counting matching open paren/brace characters.\n* src/implicit.c (get_next_word): Replace code with skip_reference().\n* src/read.c (conditional_line): Ditto.\n(find_map_unquote): Ditto.\n(get_next_mword): Ditto.\n(parse_variable_definition): Ditto.\n* src/function.c (handle_function): Make clear that the passed in\npointers are not modified if the function returns false.\n* src/expand.c (expand_string_buf): Don\u0027t create local variables to\ncall handle_function() since it doesn\u0027t modify its arguments.\n* src/job.c (new_job): Small simplifications.\n"
    },
    {
      "commit": "b9369709565bf4ba31e5f272b48bd199024c44e6",
      "tree": "66b9f81462f3abcf11d92aa44e57fbb9e1333843",
      "parents": [
        "1e43a5d1046f990ddaccf2bf647565a34eb56bda"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 15:35:45 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 16:40:36 2024 -0500"
      },
      "message": "* src/misc.c (writebuf, readbuf): Return a constant -1\n"
    },
    {
      "commit": "1e43a5d1046f990ddaccf2bf647565a34eb56bda",
      "tree": "bf592d2751960de406fc5e324b36dfde0a97c364",
      "parents": [
        "25049fef16d7ccac1836443cb2888231a4d694b5"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sat Jan 27 16:37:59 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 16:40:36 2024 -0500"
      },
      "message": "[SV 65211] Fix load and loadapi tests.\n\n* scripts/features/load: Suppress unused variable compiler warnings.\n* scripts/features/loadapi: Ditto.\n"
    },
    {
      "commit": "25049fef16d7ccac1836443cb2888231a4d694b5",
      "tree": "83c120234e032b4851ba374d91428d9bf26dc027",
      "parents": [
        "31036e648f4a92ae0cce215eb3d60a1311a09c60"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Thu Jan 18 17:54:59 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 27 16:40:36 2024 -0500"
      },
      "message": "[SV 65172] Avoid buffer overruns when expanding for $(shell ...)\n\nReported-by: MIAOW Miao \u003cguoyr_2013@hotmail.com\u003e\nPatch from: Henrik Carlqvist \u003chc981@poolhem.se\u003e\nTest from: Dmitry Goncharov \u003cdgoncharov@users.sf.net\u003e\n\n* src/expand.c (recursively_expand_for_file): Check the variable name\nbefore checking for equality so we don\u0027t overrun the buffer.\n* tests/scripts/functions/shell: Add a test with a very long variable.\n"
    },
    {
      "commit": "31036e648f4a92ae0cce215eb3d60a1311a09c60",
      "tree": "eccb7f4a4f5ed7f495bb8d78b2dcbce8c6d78cc1",
      "parents": [
        "1ff728bff4285df8924cfcba024cea58c3350f77"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jan 08 23:14:57 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jan 08 23:31:58 2024 -0500"
      },
      "message": "[SV 64571] Add --print-targets option\n\nAdd an option to print a list of targets defined in the makefiles.\nDon\u0027t print targets of implicit rules, or special targets.  To\nsupport this remember which files are deemed suffix rule targets.\n\nAdd a missing warning for single-suffix targets with prerequisites.\n\nSuggested by many.  Sample implementation by Tim \u003ctdhutt@gmail.com\u003e.\n\n* NEWS: Announce the new option and single-suffix warning.\n* doc/make.1: Add --print-targets to the man page.\n* doc/make.texi: Add --print-targets to the documentation.  Clean up\nthe text around the definition of suffix rules.\n* src/main.c (print_targets_flag): New variable for --print-targets.\n(switches): Add a new long option --print-targets.\n(main): If the option was provided call print_targets() and exit.\n* src/filedef.h (struct file): Add a \"suffix\" boolean value.  Remove\nprint_prereqs() since it\u0027s static.  Add new print_targets().\n* src/file.c (rehash_file): Merge the new suffix value.\n(print_prereqs): Used only locally: change to static.\n(print_target): Print targets which are not suffix rule targets and\nare not special targets.\n(print_targets): Call print_target() on each file.\n* src/rule.c (convert_to_pattern): Make maxsuffix local; it doesn\u0027t\nneed to be static.  Emit ignoring prerequisites for single-suffix\nrules as well as double-suffix rules.  Remember which files are\nactually suffix rules.\n* tests/scripts/features/suffixrules: Test single-suffix behavior.\n* tests/scripts/options/print-targets: Add tests for --print-targets.\n"
    },
    {
      "commit": "1ff728bff4285df8924cfcba024cea58c3350f77",
      "tree": "753905f79dc31f39c2554460e9c0f2978088e3d5",
      "parents": [
        "1161779ef8a4c938dea525defae8aa51a5a8aa28"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 07 11:28:23 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 07 11:28:23 2024 -0500"
      },
      "message": "* src/makeint.h: Add an ARRAYLEN macro to compute array sizes\n\n* src/main.c: Replace inline array length computation with ARRAYLEN.\n* src/function.c: Ditto.\n* src/read.h: Ditto.\n"
    },
    {
      "commit": "1161779ef8a4c938dea525defae8aa51a5a8aa28",
      "tree": "c9f43c8f51dd0327d01398aea6ef656a4e44e9da",
      "parents": [
        "a80670ad41c68e00bc3e4f191dde379b3f312937"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 07 10:22:20 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Jan 07 10:22:20 2024 -0500"
      },
      "message": "* doc/make.texi (Text Functions): [SV 64339] Clarify pattern use.\n"
    },
    {
      "commit": "a80670ad41c68e00bc3e4f191dde379b3f312937",
      "tree": "bc06b58b83c18119b4bac18d3b74900d68044aef",
      "parents": [
        "d86448fe5f7b8195790de1bc34e7fa07ab974d4a"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 06 17:55:04 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 06 18:06:09 2024 -0500"
      },
      "message": "* (all): Update Copyright year to 2024\n"
    },
    {
      "commit": "d86448fe5f7b8195790de1bc34e7fa07ab974d4a",
      "tree": "0de5ef983082562b70a2b461a1d867155eb84281",
      "parents": [
        "33932663b031e128200a45818a19fe0620ccb50f"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 06 17:42:40 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 06 17:42:40 2024 -0500"
      },
      "message": "[SV 64402] Correct locating \",\" in ifeq/ifneq conditionals\n\nEnsure that we correctly skip the entirety of a macro or function\nreference when searching for the \",\" separator in an ifeq/ifneq\nconditional, including using \"$,\" and also \"${foo,bar}\".  Note that\nthis change means that parenthesis OTHER than those used for variable\nexpansion are not considered special, any longer.\n\n* NEWS: Announce the change.\n* src/read.c (conditional_line): Skip variable references when looking\n  for \",\" and ensure that we match closing parens/braces properly.\n* tests/scripts/features/conditionals: Add tests for this behavior.\n"
    },
    {
      "commit": "33932663b031e128200a45818a19fe0620ccb50f",
      "tree": "8b868af8c86ccd52f57ba8b4bfa97977972cc618",
      "parents": [
        "89bea82af37908f2c4cc1fdea1433b927e2864a2"
      ],
      "author": {
        "name": "Dmitry Goncharov",
        "email": "dgoncharov@users.sf.net",
        "time": "Sat Jan 06 17:39:43 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jan 06 17:39:43 2024 -0500"
      },
      "message": "[SV 65006] Allow secondary expansion of .EXTRA_PREREQS\n\n* src/rule.c (snap_implicit_rules): Set need_2nd_expansion of each\n  prerequisite of global .EXTRA_PREREQS.\n* src/file.c (snap_file):  Set need_2nd_expansion of each prerequisite\n  of target-specific .EXTRA_PREREQS.\n* tests/scripts/variables/EXTRA_PREREQS: Add tests.\n\nReported by Daniel Gerber \u003cdg@atufi.org\u003e.\n"
    },
    {
      "commit": "89bea82af37908f2c4cc1fdea1433b927e2864a2",
      "tree": "67f08ef2ce4b432d19d767f5bbddbc565120156a",
      "parents": [
        "dd1980426e9d6a8061f0b269a246261b140977dc"
      ],
      "author": {
        "name": "Jouke Witteveen",
        "email": "j.witteveen@gmail.com",
        "time": "Mon Jan 01 19:27:44 2024 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jan 01 19:31:37 2024 -0500"
      },
      "message": "* src/function.c (func_let): Don\u0027t edit nonexistent values\n\n* tests/scripts/functions/let: Test trailing whitespace in value list.\n"
    },
    {
      "commit": "dd1980426e9d6a8061f0b269a246261b140977dc",
      "tree": "2ab15eb1d805c982347c185f47059cafc6fa6d21",
      "parents": [
        "2ce7e408225d336b9cb47302fafeeb1e9ccf1215"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 03 18:28:25 2023 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jan 01 19:24:37 2024 -0500"
      },
      "message": "* doc/make.texi (Text Functions): [SV 64818] Remove redundant text\n"
    },
    {
      "commit": "2ce7e408225d336b9cb47302fafeeb1e9ccf1215",
      "tree": "03db9fc80945af3fbefc46e8a618751feda04303",
      "parents": [
        "b1e240c554654f55af9e40e8bf634cae6c686d62"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Dec 03 18:00:01 2023 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jan 01 19:24:37 2024 -0500"
      },
      "message": "* .clangd: Add configuration for the clangd LSP server\n"
    },
    {
      "commit": "b1e240c554654f55af9e40e8bf634cae6c686d62",
      "tree": "4de6cd6d7b42c584e178fb175345bbaeee26bbbe",
      "parents": [
        "7fa40eb4fc5d3169e4bd00840c41a6d0edcca825"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:21:55 2023 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:21:55 2023 -0500"
      },
      "message": "* doc/make.texi: [SV 64924] Add missing parenthesis\n"
    },
    {
      "commit": "7fa40eb4fc5d3169e4bd00840c41a6d0edcca825",
      "tree": "8270bbe58893ea9523212e51625bd6376c9190c1",
      "parents": [
        "8817efe46ab12479b37631b262ea462ac9a20977"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:21:06 2023 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:21:06 2023 -0500"
      },
      "message": "* doc/make.texi: Add a quick reference appendix\n"
    },
    {
      "commit": "8817efe46ab12479b37631b262ea462ac9a20977",
      "tree": "2e8fea06366333016b961852635d73d8e00520c3",
      "parents": [
        "66adfb7c6f85739771ef2650f525345b490a1620"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:20:22 2023 -0500"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sun Nov 26 23:20:22 2023 -0500"
      },
      "message": "* src/function.c (function_table_entry): Sort\n"
    },
    {
      "commit": "66adfb7c6f85739771ef2650f525345b490a1620",
      "tree": "b26eab246c8619bffc68b39852e81f3a35d82ca8",
      "parents": [
        "9af3e60f4dd102541b3c457037c96a167ac390b1"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 14:24:33 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Fri Sep 01 16:57:58 2023 -0400"
      },
      "message": "make.texi: Cleanup\n"
    },
    {
      "commit": "9af3e60f4dd102541b3c457037c96a167ac390b1",
      "tree": "941e6dd47573a047516b45aa220ba4a460bb19c3",
      "parents": [
        "8061929963aaf29c6d9ff50db9f3f87d8a7d4043"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Fri Aug 25 11:10:34 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 15:39:16 2023 -0400"
      },
      "message": "make.texi: Add an appendix with troubleshooting tips\n"
    },
    {
      "commit": "8061929963aaf29c6d9ff50db9f3f87d8a7d4043",
      "tree": "fb4ed2483c01e89764dc290bd5baa652bc96cb6a",
      "parents": [
        "cd33c9a1e938352fc3bb39f29f7d7d06548ffba9"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 15:20:31 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 15:20:31 2023 -0400"
      },
      "message": "doc/make.texi: Clean up references to GNU Make\n"
    },
    {
      "commit": "cd33c9a1e938352fc3bb39f29f7d7d06548ffba9",
      "tree": "8496f113fad02f4cd2c120416259b81fbc98721b",
      "parents": [
        "c4ecd9d9ebc011efefa88d9e7b082174849eb70d"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 14:44:50 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Aug 29 14:44:50 2023 -0400"
      },
      "message": "doc/make.texi: Remove unnecessary @node arguments\n"
    },
    {
      "commit": "c4ecd9d9ebc011efefa88d9e7b082174849eb70d",
      "tree": "3954e69574e8fb4a13b56013c069e400bae4094b",
      "parents": [
        "6b7f35cb0b7cb354c887d51af7b2f199af278a35"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Fri Aug 25 11:10:14 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Fri Aug 25 11:10:14 2023 -0400"
      },
      "message": "bootstrap.conf: Update to the latest gnulib stable branch\n"
    },
    {
      "commit": "6b7f35cb0b7cb354c887d51af7b2f199af278a35",
      "tree": "14a31f871e115d2dbfd2dcd6a619ae6b384ce3b0",
      "parents": [
        "10003747596b4e03df0fbce760c0e560cf80a3ca"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Jul 04 14:19:37 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Jul 04 14:26:58 2023 -0400"
      },
      "message": "* AUTHORS: Updates\n"
    },
    {
      "commit": "10003747596b4e03df0fbce760c0e560cf80a3ca",
      "tree": "a1a58962a9ced3be146bfa4521e5d55b0030dee6",
      "parents": [
        "8d76fb8778264b21820f7294c9845a1d00a466b7"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 21:00:32 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Tue Jul 04 14:26:58 2023 -0400"
      },
      "message": "Fix GCC compile warning for \"bad-function-cast\" on Windows\n\nTrick the compiler by hiding the cast in a function call.\n\n* src/os.h: Declare the new function.\n* src/w32/w32os.c (get_handle_for_fd): Convert and cast a file\ndescriptor into a Windows HANDLE.\n(check_io_state): Call the new function rather than casting.\n(osync_release): Ditto.\n(fd_inherit): Ditto.\n(fd_noinherit): Ditto.\n* src/function.c (windows32_openpipe): Ditto.\n* src/w32/compat/posixfcn.c (isatty): Ditto.\n* src/w32/subproc/sub_proc.c (process_easy): Ditto.\n"
    },
    {
      "commit": "8d76fb8778264b21820f7294c9845a1d00a466b7",
      "tree": "2738ae060c7021ebb873116afc3aa3d96675120e",
      "parents": [
        "ee366afbf1c9e821af9b86545da6ae1ce48d68e0"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 21:00:31 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jul 01 12:49:24 2023 -0400"
      },
      "message": "Fix GCC compile warning for \"format-signedness\" in Windows\n\n* src/job.c (reap_children): Use unsigned int for DWORD.\n* src/w32/subproc/sub_proc.c (process_easy): Ditto.\n* src/w32/w32os.c (jobserver_setup): Ditto.\n(jobserver_release): Ditto.\n(jobserver_acquire): Ditto.\n"
    },
    {
      "commit": "ee366afbf1c9e821af9b86545da6ae1ce48d68e0",
      "tree": "2569a9ac8dec5c5decc176cfd1fa153de5084ae1",
      "parents": [
        "b686980c66e4ea47b6cf82e52a9e170298c829b4"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 16:09:54 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jul 01 12:49:24 2023 -0400"
      },
      "message": "* src/w32/compat/posixfcn.c (ttyname): Avoid const char*\n"
    },
    {
      "commit": "b686980c66e4ea47b6cf82e52a9e170298c829b4",
      "tree": "d456a9879bd6452082c7ed4b3b2c6047694abc4f",
      "parents": [
        "8e5c96c318170214979dffdac673dbfe39e0f8d8"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 16:09:55 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jul 01 12:49:24 2023 -0400"
      },
      "message": "Fix GCC compile warning for \"unused-parameter\" on Windows\n\n* src/w32/compat/posixfcn.c (isatty): Avoid unused-parameter warnings.\n(jobserver_pre_child): Ditto.\n(jobserver_post_child): Ditto.\n(jobserver_acquire): Ditto.\n(fd_set_append): Ditto.\n"
    },
    {
      "commit": "8e5c96c318170214979dffdac673dbfe39e0f8d8",
      "tree": "bdd1b3d096f772634c4d413edd00b688c8dc954d",
      "parents": [
        "363bdaef8c49f08a0ff38c5b64027f70a0f9d438"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 16:09:53 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jul 01 12:49:24 2023 -0400"
      },
      "message": "Fix GCC compile warning format-security on Windows\n\n* src/job.c (create_batch_file): Avoid non-static format strings.\n* src/main.c (handle_runtime_exceptions): Ditto.\n* src/w32/subproc/w32err.c (map_windows32_error_to_string): Ditto.\n"
    },
    {
      "commit": "363bdaef8c49f08a0ff38c5b64027f70a0f9d438",
      "tree": "206cc743a6f3be6906701d9470ec11da20e08143",
      "parents": [
        "b2bf660abc4611677670b01fcbb0dc94ce2c35f7"
      ],
      "author": {
        "name": "Torbjörn SVENSSON",
        "email": "torbjorn.svensson@foss.st.com",
        "time": "Fri Jun 09 16:09:52 2023 +0200"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Sat Jul 01 12:49:20 2023 -0400"
      },
      "message": "Fix GCC compile warning declaration-after-statement on Windows\n\n* src/w32/w32os.c (check_io_state): Move the HANDLE declarations.\n"
    },
    {
      "commit": "b2bf660abc4611677670b01fcbb0dc94ce2c35f7",
      "tree": "f09254bb6eb45e670eb5756b4f0d1741fd5ed59c",
      "parents": [
        "04f4c2b8d95e895270b612b5ea3841ee4d3dcc26"
      ],
      "author": {
        "name": "Costas Argyris",
        "email": "costas.argyris@gmail.com",
        "time": "Mon Jun 19 09:51:13 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jun 19 13:29:52 2023 -0400"
      },
      "message": "Add a UTF-8 resource when building for Windows\n\nIf a resource compiler is available, use it to add a UTF-8 resource\nto the GNU Make executable on Windows.  As a result, GNU Make will\nuse UTF-8 as its ANSI code page, enabling it to work with UTF-8\nencoded Makefiles, understand UTF-8 paths passed to it, etc.\n\nThese build process changes apply to all 3 ways that GNU Make can\nbe built for Windows:\n\n1) configure\n2) Basic.mk\n3) build_w32.bat\n\nWhen building with Visual Studio the resource compiler should always\nbe available.\n\nWhen building with GCC or TCC, it depends on the availability of\n\u0027windres\u0027.\n\nIf a resource compiler is not available, don\u0027t fail the build but\njust proceed without the UTF-8 resource, effectively ignoring this\nfeature.\n\nThe UTF-8 resource only has an effect when GNU Make is running on a\nminimum target version of Windows Version 1903 (May 2019 Update).\nWhen the built GNU Make is running on an earlier version of Windows,\nthe embedded UTF-8 resource has no effect.\n\nCode page information is added to --version output to tell users what\ncode pages are being used by any combination of GNU Make build (with\nor without the UTF-8 resource) and Windows version that GNU Make is\nrunning on (earlier than 1903 or not).\n\n* README.git: Fix a typo.\n* configure.ac: Search for windres and set WINDRES / HAVE_WINDRES.\n* Makefile.am: Add manifest and resource files to EXTRA_DIST and\nadd a windres invocation to build them.\n* build_w32.bat: Add support to build resource files.\n* src/main.c (print_version): Add codepage info to Windows output.\n* src/w32/utf8.manifest: Add a windres manifest file.\n* src/w32/utf8.rc: Add a windres resource file.\n* Basic.mk.template: Add support for building resource files.\n* mk/Windows32.mk: Support windres resource files.\n* .gitignore: Ignore TCC output directories.\n"
    },
    {
      "commit": "04f4c2b8d95e895270b612b5ea3841ee4d3dcc26",
      "tree": "c87cbf142b35e5a6042d4c61170409c47468e1c5",
      "parents": [
        "347316fdf615763be64b09e707fb8d6b35188826"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jun 19 10:00:11 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jun 19 13:27:50 2023 -0400"
      },
      "message": "[SV 64124] Avoid stack overflows for large command lines\n\nModify areas dealing with large command lines to use the heap rather\nthan relying on alloca / stack space.\n\n* src/main.c (main): Allocate potentially large buffers with xmalloc.\n(decode_env_switches): Ditto.\n* src/function.c (func_error): Replace alloca with xmalloc/free.\n* tests/scripts/features/expand: Add a newline for readable diffs.\n"
    },
    {
      "commit": "347316fdf615763be64b09e707fb8d6b35188826",
      "tree": "9da8f23d70e6829b5b1e6eb590f41fb0d3e80e21",
      "parents": [
        "1a03888afaed526089ec010ecc3df838369b4f19"
      ],
      "author": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jun 19 10:04:25 2023 -0400"
      },
      "committer": {
        "name": "Paul Smith",
        "email": "psmith@gnu.org",
        "time": "Mon Jun 19 10:05:19 2023 -0400"
      },
      "message": "* po/LINGUAS: Add support for Georgian translation\n"
    }
  ],
  "next": "1a03888afaed526089ec010ecc3df838369b4f19"
}
