[SV 40361] Don't use vsnprintf(), which is an ISO C99 function.

* output.c (error, fatal, message): Take an extra argument specifying
how many bytes are used by the formatted arguments.
(get_buffer): New function that allocates the requested buffer size.
Remove msc_vsnprintf(), vfmtconcat(), and fmtconcat() as unneeded.
* makeint.h: Declare various helper macros for generating output.
* *.c: Change all error(), fatal(), message() calls to use the macros,
or pass the extra length argument directly.
* load.c: [SV 40515] Define RTLD_GLOBAL if not set.

Copyright-paperwork-exempt: yes
[SV 40226] Add a new type of switch: single-string options

* main.c (struct command_switch): Change the "string" types to "strlist"
and make "string" be a single-valued string instead.
(output_sync_option, jobserver_fds, sync_mutex): Change to string type.
(decode_output_sync_flags): Handle single strings instead of lists.
(prepare_mutex_handle_string): Ditto.
(main): Ditto.
(clean_jobserver): Ditto.
(init_switches): Handle the new type.
(decode_switches): Ditto.
(define_makeflags): Ditto.
Fix memory leak during environment option decoding.

* main.c (decode_switches): Always make a copy of option arguments.
(decode_env_switches): Use a stack buffer to convert environment
switches for parsing.
* read.c (unescape_char): Use memmove() for overlapping memory.
* load.c (load_file): Reset the name length minus the symbol.
* features/loadapi (test_expand): Allocate memory for the nul byte.
Describe the purpose of this repo

Add --graph/-g from patch 7447 from Luke Shumaker

Add --update-time/-u profiling option as found in OpenShift's repo
TODO: Profiling info now mixes up with output which is unusable

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
prints invoked, finished time of each target

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
explain what print_target_update_time_flag is for

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
mark this version as distinct from vanilla make

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
make profiling info stand out (until we have config)

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
profiling info on stderr; print only if it makes sense

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
'make -j' profile results

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
declare print_targets_update_time to remove warning

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
Improve the profiling output

Add make level and pid to profiling target identifier
separate start, end and delta fields using ';'

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
Profile option: -u/--update-time -> -P/--profiling

-P/--profile is a better name for profiling option
Profile option will accept parameter for ouput format

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
Added configurable profile format option

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
free up memory used by profile feature

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>
make.1: Explain how -P works

Signed-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>