and though bugs are the bane of my existence, rest assured the wretched thing will get the best of care here

This project is mirrored from https://git.savannah.gnu.org/git/make.git. Pull mirroring updated .
  1. 15 Mar, 2021 5 commits
    • Paul Smith's avatar
      [SV 58497] Ensure $(file <) newline removal succeeds · c5319e75
      Paul Smith authored
      Keep a count of bytes read rather than comparing pointers since the
      variable_buffer might get reallocated.
      
      Bug and patch by Ken Tossell <ken@tossell.net>
      Regression tests by Dmitry Goncharov <dgoncharov@users.sf.net>
      Tweaked by Paul Smith <psmith@gnu.org>
      
      * src/function.c (func_file): Use bytes read rather than a pointer.
      * tests/scripts/functions/file: Provide various tests for reading
      empty files, files with/without newlines, and large files.
      c5319e75
    • Dmitry Goncharov's avatar
      [SV 60188] Explicit prereqs cannot be intermediate files · 510e5ce8
      Dmitry Goncharov authored
      If a prereq of a pattern is an explicit target, it should not be
      considered an intermediate file.
      
      (Minor tweaks by Paul Smith <psmith@gnu.org>)
      
      * src/dep.h (struct nameseq): Add is_explicit flag.
      * src/implicit.c (struct patdeps): Ditto.
      (pattern_search): Set the is_explicit flag appropriately for each
      prerequisite, based on whether it contained a pattern or not.
      Update the help output to note implicit vs. explicit prereqs.
      * tests/scripts/features/double_colon: Add tests.
      * tests/scripts/features/grouped_targets: Ditto.
      * tests/scripts/features/patternrules: Ditto.
      * tests/scripts/features/se_implicit: Ditto.
      * tests/scripts/features/statipattrules: Ditto.
      510e5ce8
    • Paul Smith's avatar
      * tests/scripts/features/exec: Small cleanup · 144f436c
      Paul Smith authored
      144f436c
    • Paul Smith's avatar
      Ensure variable_buffer is always set. · 52056d7b
      Paul Smith authored
      Initialize the global variable_buffer in main() so that it is never
      a null pointer.  Then invoking variable_expand("") is never needed:
      simply use the variable_buffer pointer when we want to restart the
      variable buffer.  The main point of this simplification is not to
      keep a separate pointer to the beginning of the buffer: this is
      dangerous because the buffer may be re-allocated.  Instead always
      use the variable_buffer pointer itself.
      
      * src/variable.h (initialize_variable_output): Publish.
      * src/expand.c (initialize_variable_output): Remove static.
      * src/main.c (main): Initialize variable_buffer.
      * src/file.c (enter_prereqs): Don't call variable_expand("") and
      don't save a separate buffer pointer than might be outdated.
      (expand_deps): Ditto.
      * src/read.c (record_files): Ditto.
      * src/remake.c (library_search): Ditto.
      52056d7b
    • Paul Smith's avatar
      [SV 59881] Handle vertical TAB consistently · c66ec5fa
      Paul Smith authored
      While parsing makefiles get_next_mword() was treating VTAB as a word
      character rather than a word separator.  However, when using
      find_next_token(), for example in patsubst_expand_pat(), we treated
      VTAB as a word separator causing multiple words to appear where we
      didn't expect them.
      
      * src/makeint.h (END_OF_TOKEN): Change from a loop to a boolean check.
      * src/misc.c (end_of_token): Move the loop here.
      * src/read.c (get_next_mword): Skip whitespace, not just blank, to
      find the start of the word and use END_OF_TOKEN() to decide when the
      current word is finished.
      c66ec5fa
  2. 14 Mar, 2021 2 commits
  3. 08 Mar, 2021 4 commits
  4. 07 Dec, 2020 1 commit
  5. 06 Dec, 2020 3 commits
  6. 05 Dec, 2020 3 commits
    • Paul Smith's avatar
      [SV 59169] Add --debug=why and --debug=print options · 7044e0c9
      Paul Smith authored
      Add debug options to print recipes even if they would otherwise be
      silent, and to print the reason that a target was considered out of
      date.
      
      Modify --trace to simply be a shorthand for --debug=print,why.
      
      * NEWS: Announce changes.
      * doc/make.texi (Summary of Options): Document the new options.
      * doc/make.1: Ditto.
      * src/debug.h: Add new flags DB_PRINT and DB_WHY.
      * src/makeint.h: Remove the trace_flag variable.
      * src/job.c (start_job_command): Check debug flags not trace_flag.
      (new_job): Ditto.
      * src/main.c (trace_flag): Make a static variable for switches.
      (decode_debug_flags): Set DB_PRINT and DB_WHY if trace_flag is set.
      * tests/scripts/variables/GNUMAKEFLAGS: Update known-good messages.
      * tests/scripts/variables/MAKEFLAGS: Ditto.
      7044e0c9
    • Paul Smith's avatar
    • Paul Smith's avatar
      [SV 57676] Support included files being built after failing · c4cc2e95
      Paul Smith authored
      If a -include file does not exist, then some subsequent operation
      creates it, then allow it to be successfully included.
      
      * src/read.c (eval_makefile): If our last mtime was NONEXISTENT then
      reset it to 0 so we'll check it again.
      * tests/scripts/features/include: Add a test for this behavior.
      c4cc2e95
  7. 02 Dec, 2020 2 commits
  8. 29 Nov, 2020 12 commits
    • Paul Smith's avatar
    • Paul Smith's avatar
    • Paul Smith's avatar
    • Paul Smith's avatar
      Resolve unused-result warnings for alloca(0) · b262ea5d
      Paul Smith authored
      * src/makeint.h (free_alloca): New macro to defeat warn_unused_result.
      * src/read.c (eval_makefile): Call it.
      (eval_buffer): Ditto.
      * src/remake.c (update_file): Ditto.
      b262ea5d
    • Paul Smith's avatar
      Avoid some valgrind warnings · cc20f905
      Paul Smith authored
      Using sscanf() to parse archive header values (struct ar_hdr) can lead
      to valgrind warnings which are probably bogus but are annoying.
      To be safer, create a local method to convert the ASCII integer
      strings into integers.
      
      * src/arscan.c (parse_int): Turn integer strings into integers.
      (ar_scan): Initialize struct ar_hdr memory.
      Call parse_int() rather than sscanf/atol.
      cc20f905
    • Paul Smith's avatar
      [SV 41273] Allow the directory cache to be invalidated · 9e2fa246
      Paul Smith authored
      Each time we invoke a command it's possible that it will change the
      filesystem in ways that were not described by the target.  If that
      happens but we have cached previous directory contents then we may
      make decisions or report results based on obsolete information.
      
      Keep a count of how many commands we've invoked, and remember the
      current command count every time we load the contents of a directory.
      If we request the directory and the current command count has changed
      we know the cache is outdated so reload from scratch.
      
      * NEWS: Announce the change.
      * src/makeint.h (command_count): Create a global counter.
      * src/main.c (command_count): Ditto.
      * src/job.c (reap_children): Increment the counter on job completion.
      * src/function.c (func_file): Increment if we write a file.
      * src/dir.c (clear_directory_contents): Clear the current contents of
      a cached directory.
      (struct directory_contents): Remember the counter value.
      (struct directory): Remember the counter value for non-existing dirs.
      (find_directory): If we have a cached directory and the count hasn't
      changed then return it.  Else, clear the previous contents and re-read
      from scratch.
      * tests/scripts/features/dircache: Add tests of the directory cache.
      9e2fa246
    • Paul Smith's avatar
      Support "unexport" in target-specific variables. · 2dc0280d
      Paul Smith authored
      Rewrite the environment variable algorithm to correctly inherit
      export settings from parent variable sets.  The new algorithm
      for computing the table of environment variables is:
      
      - Start with the most local variable set and proceed to global.
      - If the variable already exists in the table and we don't know
        its export status, update it with the current variable's status.
      - If the variable is not in the table and it's not global, add it
        regardless of its status so if it's unexported we remember that.
      - If the variable is not in the table and is global, check its
        export status and don't add it if we won't export it.
      
      Then when generating the environment variables, check the export
      status of each variable in case it was a target-specific variable
      and we have determined it should not be exported.
      
      Rework SHELL handling to check at the end whether we added it or
      not and if we didn't, add the value from the environment.
      
      * NEWS: Announce support for target-specific "unexport"."
      * doc/make.texi (Target-specific): Document the support.
      * src/variable.h (enum variable_export): Make into a global type.
      * src/read.c (struct vmodifiers): Use enum variable_export rather
      than individual booleans.
      (parse_var_assignment): Parse the "unexport" keyword.
      (eval): Remember the vmodifier value in the variable.
      (record_target_var): Ditto.
      * src/variable.c (should_export): Check if the variable should be
      exported.
      (target_environment): Implement the above algorithm.
      * tests/scripts/features/export: Test export/unexport with variable
      assignments on the same line.
      * tests/scripts/features/targetvars: Add a comprehensive suite of
      tests for different types of target-specific export / unexport.
      * tests/scripts/variables/SHELL: Update the comment.
      2dc0280d
    • Dmitry Goncharov's avatar
      [SV 59230] Preserve export settings for target-specific vars · 90959b8b
      Dmitry Goncharov authored
      * src/read.c (record_target_var): Don't overwrite pre-existing export
      flag unless we're changing it.
      * tests/scripts/features/targetvars: Add a test.
      90959b8b
    • Paul Smith's avatar
      [SV 59230] Ensure environment variables are exportable · 19ae6fe7
      Paul Smith authored
      When checking for invalid environment variable names we searched the
      entire name string instead of just the first LENGTH chars; this could
      cause us to incorrectly decide the variable was not exportable.
      
      Dmitry Goncharov <dgoncharov@users.sf.net> found this bug and
      provided a test case and sample fix: I used the test but chose a
      slightly different fix.
      
      * src/variable.c (define_variable_in_set): check the variable name
      not the input string.
      * tests/scripts/features/targetvars: Ensure environment variable
      values are exported.
      19ae6fe7
    • Paul Smith's avatar
      * src/default.c (default_variables) [AIX]: [SV 59096] Fix ARFLAGS · 0e020bbc
      Paul Smith authored
      Reported by Dmitry Goncharov <dgoncharov@users.sf.net>, with a patch
      changing the pattern rule for building archives.  I decided to
      change the default value of ARFLAGS on AIX instead.
      0e020bbc
    • Paul Smith's avatar
      [SV 35711] Check for special targets earlier · c01222c0
      Paul Smith authored
      GNU make must recognize some special targets as they are defined.
      Because of the way targets are defined, we were not recognizing these
      special targets until we were handling the NEXT statement.  However
      that's too late for some special targets such as .POSIX etc. which can
      change the behavior of make during parsing.
      
      Check for special targets earlier, as soon as we've finished parsing
      the target introduction line (before we've even parsed the recipe).
      
      * NEWS: Mention the change.
      * src/read.c (check_specials): New function to look for special
      targets.  Move checks from eval() and record_files() to this new
      function.
      (eval): Call check_specials() after we've completed parsing the target
      introduction line.  Move default goal detection to check_specials().
      (record_files): Move handling of .POSIX, .SECONDEXPANSION, and
      .ONESHELL to check_specials().
      * tests/scripts/misc/bs-nl: Remove workaround for late .POSIX issue.
      * tests/scripts/targets/POSIX: Add a comment.
      c01222c0
    • Paul Smith's avatar
  9. 13 Nov, 2020 1 commit
  10. 28 Oct, 2020 1 commit
  11. 19 Jul, 2020 2 commits
    • Paul Smith's avatar
      * NEWS: [SV 58435] Document minimum C compiler version requirement · a80b0096
      Paul Smith authored
      * configure.ac: Require c99 via AC_PROG_CC_C99
      a80b0096
    • Paul Smith's avatar
      [SV 58735] Define the order that makefiles are rebuilt. · 62e8f029
      Paul Smith authored
      Ensure that makefiles are rebuilt in the order in which make first
      considered them, and document this behavior in the manual.
      
      * NEWS: Add a note about the new behavior
      * doc/make.text (How make Processes a Makefile): Document it.
      * main.c (main): Inverse the list of makefile goals.
      * read.c (read_all_makefiles): Add default makefiles to the list at
      the front in reverse order, the same way other makefiles are added.
      * tests/scripts/features/include: Add tests to verify rebuild order.
      62e8f029
  12. 10 Jul, 2020 2 commits
  13. 14 May, 2020 1 commit
  14. 03 May, 2020 1 commit
    • Paul Smith's avatar
      [SV 57930] Cast char to unsigned char to call ctype functions · 17705402
      Paul Smith authored
      This cast was already done almost everywhere: fix some stragglers.
      
      * src/load.c (load_file): Cast char to unsigned char.
      * src/misc.c (strcasecmp, strncasecmp): [!POSIX] Ditto.
      * src/dir.c (vms_hash): [VMS] Ditto.
      * src/vms_progname.c (set_program_name): [VMS] Ditto.
      * src/vms_jobs.c (posix_parse_dq): [VMS] Ditto.
      (posix_parse_dollar): [VMS] Ditto.
      (build_vms_cmd): [VMS] Ditto.
      (child_execute_job): [VMS] Ditto.
      17705402