This project is mirrored from https://git.savannah.gnu.org/git/make.git.
Pull mirroring failed .
Last successful update .
Last successful update .
- 15 Mar, 2021 5 commits
-
-
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.
-
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.
-
Paul Smith authored
-
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. -
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.
-
- 14 Mar, 2021 2 commits
-
-
Paul Smith authored
* src/read.c (parse_var_assignment): If called in a target-specific variable context don't allow define/undefine as variable assignments. * test/scripts/variables/define: Add a test. * test/scripts/variables/undefine: Add a test.
-
Paul Smith authored
-
- 08 Mar, 2021 4 commits
-
-
Jouke Witteveen authored
* NEWS: Use "local" instead of the incorrect "lexically-scoped". * doc/make.texi: Refer to let/foreach variables as local variables.
-
Paul Smith authored
-
Paul Smith authored
-
Paul Smith authored
-
- 07 Dec, 2020 1 commit
-
-
Paul Smith authored
-
- 06 Dec, 2020 3 commits
-
-
Jouke Witteveen authored
Add a new function $(let ...) which allows lexically scoped variables. * NEWS: Add information on this feature. * doc/make.texi (Let Function): Document the 'let' function. * src/function.c (func_let): Create the 'let' built-in function. * tests/scripts/functions/let: Test the 'let' built-in function.
-
Paul Smith authored
-
Paul Smith authored
-
- 05 Dec, 2020 3 commits
-
-
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.
-
Paul Smith authored
-
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.
-
- 02 Dec, 2020 2 commits
-
-
Paul Smith authored
-
Paul Smith authored
-
- 29 Nov, 2020 12 commits
-
-
Paul Smith authored
-
Paul Smith authored
-
Paul Smith authored
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
Paul Smith authored
-
- 13 Nov, 2020 1 commit
-
-
Paul Smith authored
* src/function.c (func_filter_filterout): Allocate arrays to hold pattern and word information rather than creating linked lists on the stack. * tests/scripts/functions/filter-out: Test large filters.
-
- 28 Oct, 2020 1 commit
-
-
Paul Smith authored
-
- 19 Jul, 2020 2 commits
-
-
Paul Smith authored
* configure.ac: Require c99 via AC_PROG_CC_C99
-
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.
-
- 10 Jul, 2020 2 commits
-
-
Paul Smith authored
-
Paul Smith authored
-
- 14 May, 2020 1 commit
-
-
Paul Smith authored
-
- 03 May, 2020 1 commit
-
-
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.
-