Changes for version 2.0

  • makepp: Environment $ROOT is harmful to our builtin.
  • 2012-03-04 pfeiffer <occitan@esperanto.org>
  • Version 2.0rc3 makepp-2.0rc3.tgz, technically 1.50-120304:20-0228:1-0207:5 on sourceforge & CPAN.
    • *: Spellcheck pod and comments.
  • 2012-02-28 pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm (expand_expression): In substitution reference add % to both or none. (Bug 3488851) (expand_variable): Extend builtin vars as though they were "=" assigned. (Bug 3488858)
    • Mpp/Rule.pm (save_build_info_tag_): Don't skip INCLUDE_PATHS if it contains only undef.
    • pod/html/Pod/Html.pm
    • pod/html/html.pl: Bundle 1.11 as newer ones are not compatible and broken. (Perl bug 110520)
  • 2012-02-14 pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl (have_cc):
    • t/**/*.test: Check for a C compiler, eliminating CPAN testers' false negatives.
  • 2012-02-08 pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm (_read_makefile_line_stripped_1): Warn about multiline "# ... $[X]".
    • t/makeppreplay.test: Give hint about ccache bug (found by Mike Frysinger).
    • *: Fix many typos.
  • 2012-01-22 pfeiffer <occitan@esperanto.org>
    • pod/html/html.pl:
    • pod/html/makepp.less: Create valid xhtml 1.1.
  • 2012-01-19 pfeiffer <occitan@esperanto.org>
    • pod/html/makepp.{css,js}:
    • pod/html/html.pl: Add button to search and abbrevs to nav bar, remember its side.
    • install.pl: Convert index to better html, it was useless as Man anyway.
    • pod/makepp_faq.pod: Add safety question.
  • 2012-01-11 pfeiffer <occitan@esperanto.org>
  • Version 2.0rc2 makepp-2.0rc2.tgz, technically 1.50-120111:3-0106:1-111204:2 on sourceforge & CPAN.
    • makeppgraph (html): Use same folding cursors as new web site.
    • Mpp/Lexer.pm (lex_rule): Don't fail if shell command not understood.
    • Mpp/Makefile.pm (grok_rule): Singular $(ouptut) or $(target) also prevent legacy fallback.
    • t/additional_tests/xml.test: Only run if parser is free of warnings.
    • pod/*: Fixed broken links and cosmetic changes.
    • pod/html/*: Valid compact xhtml, tabs as sprite, refactored, and fixed links.
  • 2012-01-06 pfeiffer <occitan@esperanto.org>
    • install.pl:
    • pod/html/*: New doc and website design. Thanks a lot to 조연희 (Jo Younhee) for the redesign of the camel at work logo with a hand crafted font! And thanks to html-templates for the base artwork, which I modernized with the help of {less}.
    • pod/*: Some cleanup.
  • 2011-12-04 pfeiffer <occitan@esperanto.org>
    • Mpp/Subs.pm (make): Provide documented statement.
    • t/additional_tests/xml.test: Only run if parser works.
  • 2011-11-25 pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm
    • Mpp/Text.pm
    • Mpp/Subs.pm: Private extra parameter to filesubst, to handle $* correctly.
    • makepp: Turn pod into comments as this hid makepp.pod.
    • control: Create deb package.
  • 2011-11-20 pfeiffer <occitan@esperanto.org>
  • Version 2.0rc1 makepp-2.0rc1.tgz, technically 1.50-111120:8-1107:3-1030:7 on sourceforge & CPAN.
  • Beware: this release has a more powerful signature syntax, which is not understood by older versions. So don't call an older mpp on things built with this version, which includes from a repository you built in.
    • Mpp/Rule.pm
    • Mpp/Subs.pm: Statement signature now understands the keyword override.
    • Mpp/Signature/xml_space.pm
    • Mpp/Signature/xml.pm: New modules
    • makeppinfo: Handle directories by showing every file and warn if no build info.
  • 2011-11-07 pfeiffer <occitan@esperanto.org>
    • Mpp/Signature.pm: C can now also be extended with filename regexps.
    • Mpp/Rule.pm: Rescan on unknown sig method from build info instead of dying.
    • Mpp/CommandParser/Vcs.pm: Replace verilog_simulation_md5 by simple sig spec C.v.
  • 2011-10-30 pfeiffer <occitan@esperanto.org>
    • Mpp/Rule.pm (set_signature_class): Incorporates set_signature_method. Always store name and method together, so mppr can pick it up from the build info and sign correctly. (load_scaninfo_single): Rescan if sig method changed, because that obsoletes old sigs. Instead of exactly 'sys' & 'lib' to avoid should_find, avoid it only if those strings are contained, allowing various tags with this property.
    • Mpp/Scanner/Esqlc.pm:
    • Mpp/CommandParser/Esql.pm (usersys): New tag.
    • Mpp/CommandParser/Gcc.pm (tags): New overridable method.
    • Mpp/Makefile.pm:
    • Mpp/Signature.pm (get): New signature function allows additional suffixes and c_compilation_md5 can be called as C.
    • makeppinfo: Fix undef warning.
  • 2011-09-29 pfeiffer <occitan@esperanto.org>
    • *: $Mpp::BuildCheck::default and $Mpp::Signature::default replace default_build_check_method and default_signature. Statements build_check and signature now understand the keyword global. Use them for option handling.
    • Mpp/CommandParser/Gcc.pm: Handle some weird icc/icl options.
    • makeppinfo: New option -d, --dates, --decode-dates.
  • 2011-09-19 pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm:
    • Mpp/Subs.pm (f_call): Expand macro normally even in $[call], because it can't easily contain $[1].
    • makeppinfo: Now --traverse works even when SORTED_DEPS is not being displayed. With --force also show the current SIGNATURE.
  • 2011-09-15 pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.110915.tgz, version 1.50-110915:6-0827:1-0806:6 on sourceforge & CPAN.
    • makepp ($global_build_cache): Moved to $Mpp::BuildCache::global. Let appropriate s_ subs handle some options.
    • Mpp/Makefile.pm (read_makefile):
    • Mpp/Subs.pm (s_build_cache): Keywords can get passed to s_ subs, this one understands: global.
  • 2011-09-08 pfeiffer <occitan@esperanto.org>
    • Mpp/Subs.pm:
    • Mpp/Makefile.pm (read_block): Handle all multiline statements and give better diagnostics when incomplete.
  • 2011-08-27 pfeiffer <occitan@esperanto.org>
    • Mpp/Cmds.pm,
    • Mpp/Makefile.pm,
    • Mpp/Subs.pm: Turn around parsing of makefiles, allowing spaces in var names. Turn define, export & global into internally processed keywords.
  • 2011-08-06 pfeiffer <occitan@esperanto.org>
    • Mpp/Subs.pm: Recognize clang, icc & icl. Optimize searching upwards for device boundary.
    • makepp (makepprc): Optimize searching upwards for device boundary.
    • Mpp/Lexer.pm: Check explicitly for sh -c vs. sh script -opt.
    • makeppclean: New option -d, --empty-directories
    • install.pl: Add rel-links.
  • 2011-07-01 pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm (relative_filename): Use new dir attribute xABSOLUTE to have other dirs than $root (e.g. c:, /cygdrive/c, $HOME/.. and $(ROOT)/..) for preferring absolute filenames, to increase build cache consistency.
    • *: In various classes prefix undef/exists booleans with 'x': xASSUME_NEW/ASSUME_CHANGED, xDELETABLE, xEXISTS, xIN_REPOSITORY/DIR_IN_REPOSITORY, xLOGGED, xMAKEPPRC, xMAKEPP_DELETABLE, xMULTIPLE_RULES_OK, xNO_GCC, xPHONY/IS_PHONY, xPREFERRED, xRECURSIVE_MAKE, xSCANINFO_UNCACHEABLE, xTEMP/IS_TEMP, xDELETABLE, xUPDATE_BUILD_INFOS/NEEDS_BUILD_UPDATE, xREFERENCED, xNO_IMPLICIT_LOAD, xLOOKED_FOR_SUBDIRS, xIN_VERBATIM_BLOCK
    • Mpp/Event.pm (start): Do real exec on Cygwin and MSYS.
    • makepplog (REMOVE): Also give the reason, which increased log version to 3.
  • 2011-06-23 pfeiffer <occitan@esperanto.org>
    • pod/makepp_index.pod: New overall index.
    • pod/makepp_compatibility.pod: Add 5.12.4 and 5.14.1.
  • 2011-06-21 pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.110621.tgz, version 1.50-110621:8-0605:1-0507:2 on sourceforge & CPAN.
    • Mpp/Makefile.pm (expand_text): Also handle new args separator in opposite case (thanks to T. Helms).
    • Mpp/Glob.pm (wildcard_do): Replaces wildcard_action and needed_wildcard_action. If wildcard ends with slash, apply only to dirs (needed by Linux kernel). Extra arg to block only if not a wildcard.
    • Mpp/File.pm (path_file_info): Mark names with trailing slash as dir.
    • Mpp/Rule.pm (set_{build_check,signature}_method_default): Eliminate almost useless functions.
    • Mpp/Recursive.pm
    • recursive_makepp: Move MAKEPP_IGNORE_OPTS to makepp, as it caused loading this before $depth initialized. Fix $depth for --hybrid.
  • 2011-06-05 pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm (read_directory): Use the possibly newly created DIRCONTENTS, to not lose our changes.
    • Mpp/Makefile.pm
    • Mpp/Repository.pm
    • Mpp/Subs.pm: Emulate VPATH and vpath
  • 2011-05-20 pfeiffer <occitan@esperanto.org>
    • Mpp/Recursive.pm
    • install.pl: Try to have $(MAKE) without space when installed.
    • pod/makepp_compatibility.pod: Add 5.14.0.
  • 2011-05-07 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm (expand_variable): Pass lineno to $&, ...
    • Mpp/Subs.pm ($&, ...): Warn with lineno.
    • Mpp/Text.pm (format_exec_args): Pass comment sign to shell.
    • makepp (build_target_done): Say when there is no rule, instead of complaining about phony.
    • Mpp/Glob.pm (zglob_fileinfo): Commas are no longer evil.
    • makepp_builtin_rules.mk: Don't use rc-substitution, which might be off.
    • pod/makepp_compatibility.pod: Add V5.12.3
  • 2011-04-17 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.110417.tgz, version 1.50-110417:8-0123:1-0116:8 on sourceforge & CPAN.
    • Mpp/Makefile.pm: More efficient check for makepp_simple_concatenation. (setup_environment): Since exporting MAKEFLAGS, we are sure to have EXPORTS. (expand_expression): Pass f_ arg as string or ref.
    • Mpp/Subs.pm (arg, args): New functions. (f_*): Take a reference to expand allowing correct comma-splitting. (f_call): Correctly handle $0, $1, ... as normal variables. $(macro arg1,arg2) is now equivalent to $(call macro,arg1,arg2) if $(macro) is defined. Thanks to Clemens Hintze for these ideas.
    • makeppinfo,
    • makeppreplay,
    • Mpp.pm: Move common use statement to Mpp.
  • 2011-01-23 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/CommandParser/Esql.pm (xparse_command): 5.13.7 no longer understands binding =~ to two alternate regexps in a ternary operator.
    • pod/makepp_build_check.pod:
    • makeppinfo: Improve makeppinfo and its doc, expecially for understanding build check methods. Also pair up ENV_DEPS & ENV_VALS.
  • 2011-01-16 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.110116.tgz, version 1.50-110116:13-101224:4-1210:6 on sourceforge & CPAN.
    • Mpp/Scanner.pm (find): Initial suffix '/' means: try others only for a name that has no suffix.
    • CommandParser/Esql.pm, Mpp/Scanner/Esqlc.pm: Handle all known kinds of embedded SQL preprocessors. Rename to Esql as the commands are not specific to C.
    • makepp, Mpp/Recursive.pm, recursive_makepp,
    • t/recursive_variants.test: New option --hybrid and put a brake on deep recursion.
    • Mpp/CommandParser.pm, Mpp/FileOpt.pm, Mpp/Subs.pm,
    • makepp_builtin_rules.mk: Workaround for bug in new Cygwin (where stat() rarely reports an inexistent file to be a symlink) lead to cleaner implementation of $(phony xyz): xyz.exe
    • Mpp/Makefile.pm, Mpp/Fixer/Automake.pm, Mpp/Fixer/CMake.pm
    • makepplog, install.pl: New directory Fixer, to also fix CMake makefiles avoiding recursion.
    • config.pl: New version scheme caused an invalid installation makefile. (Thanks to Thomas Kluge)
    • t/additional_tests/2003_08_13_load_makefile_quotes.test:
    • t/wildcard_repository.test: NFS can use strange uid on own files.
  • 2010-12-24 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm (mark_as_directory): Cache all upwards paths as otherwise a relative path might include ../thisdir (thanks to andrewdonkin). (relative_filename): Use this caching to simplify very much.
    • Mpp/Makefile.pm: Warn about unsupported VPATH (thanks to Harald van Dijk) and ignore space after :build_cache.
    • Mpp/Repository.pm: Count mkdir failure as build error.
    • Mpp/Scanner/C.pm: Inside a <> include don't fall back to "" (cygwin/config.h caused a warning).
    • Mpp/Subs.pm (s_include): Also handle s__include.
  • 2010-12-10 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm Fix regression from change to Mpp, whereby reload did not clear variables. (expand_variable): Move sub expansion here.
    • Mpp/Text.pm (index_ignoring_quotes, hash_neq): Accept 3rd argument. (max_index_ignoring_quotes): Optimize. (split_on_whitespace): Also parens delimit shell commands.
    • Mpp/Subs.pm (f_map): Fix condition.
    • Mpp/FileOpt.pm: Actually drop old rule on reload.
    • Mpp/AutomakeFixer.pm (clean): Rename remove_automake_junk, handle empty subdir list and don't cheat by calling make.
    • Mpp/Recursive.pm: In traditional, start each make with a different logfile, and log it so you have a chance to find it.
    • Mpp/CommandParser.pm:
    • Mpp/Lexer.pm: Make found dependencies optional because in a complex action script not all commands are necessarily run. Also parse backquoted commands.
    • Mpp/Makefile.pm:
    • Mpp/Rule.pm (find_all_targets_dependencies): Remember expansion so functions won't be evaluated a 2nd time.
    • Mpp/BuildCheck/target_newer.pm (changed_dependencies): May not have been built yet.
    • makeppclean: New or changed options -k, -l & -m.
  • 2010-11-19 Daniel Pfeiffer <occitan@esperanto.org>
    • *: Reserve the term parse for command arguments. Everything else is now grokked.
  • 2010-11-17 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.101117.tgz, version 1.50-101117:18-1018:5-0929:8 on sourceforge & CPAN.
    • *: Cleanly distinguish between lexing, parsing and scanning. Fix skip-word without recursion and provide new variant for (sub)shell.
    • pod/makepp_compatibility.pod: Add 5.12.2 and more CPAN-tester results.
  • 2010-10-18 Daniel Pfeiffer <occitan@esperanto.org>
    • *: Rename ActionParser to Lexer and only refer to it by that name, to get rid of previous chaos.
    • Mpp/ActionParser/Specific.pm, Mpp/ActionParser/Legacy.pm: Deprecate useless subclasses that make it hard to get skip-word right.
    • Mpp/Rule.pm (scan_action): Remove unused func. (find_all_targets_dependencies): Fix missing return value (thx to thebamaman).
  • 2010-09-29 Daniel Pfeiffer <occitan@esperanto.org>
    • *: @Mpp::Text::N replaces individual numeric constants.
    • Mpp/FileOpt.pm (load_build_info_file):
    • makeppinfo: With -f, --force show outdated info.
  • 2010-09-18 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm (path_file_info): On Win translate \\ownhost\c$ to c: to find same file under different names and reduce $ problems.
    • Mpp/Cmds.pm (c_cp): Respect $MAKEPP_LN_CP. (c_mkdir): Handle --mode like Unix variant.
  • 2010-09-13 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Text.pm (@common_opts): Also handle --help, getting it from __DATA__ everywhere.
    • Mpp.pm (perform): Don't duplicate error message at end.
    • Mpp/Makefile.pm (skip_makefile_until_else_or_endif): Statements like sub must end with space -- don't be fooled by a rule for sub-target.
    • makepp: Don't silently ignore gmake opts. Instead $MAKEPP_IGNORE_OPTS allows controlling that, even -R is possible.
  • 2010-09-03 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (build_dependencies_done): Don't remove a file that wasn't there when we last checked, warn if it appeared.
    • Mpp/Recursive.pm:
    • recursive_makepp: Fix protocol error on -j failure.
    • Mpp/Subs.pm (f_origin): Same order as expansion and 'global'.
    • Mpp/Makefile.pm (MAKEPP_VERSION): New variable. ($if_re): Refactor repeated regexp.
    • *: Move version (and beta counting, now same for all progs and like snapshot names) to Mpp::Text. Short opt -V.
  • 2010-08-22 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/ActionParser.pm (parse_rule): Handle Shell keywords directly, so we catch variable assignment before the command.
    • Mpp/Scanner/C.pm (xscan_file): Have an informative warning about ignoring #include MACRO.
    • Many small compatibility changes: Provide functions abspath, realpath, and, or. Function suffix returns the dot too. Always set MAKEFLAGS. Allow special variables to be empty outside of rules. Allow depending on a phony that has no rule. Allow action prefix +.
    • Implement --no-print-directory. New option --last-chance-rules. Option --no-warn centrally swallows every warn(). Keep option handlers after 1st getopts, any might come recursively. Accept all unimplemented POSIX/gmake options silently.
  • 2010-07-16 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm (STAT_UID, is_executable): Remove unused functions. (lstat_array): Skip STAT_UID. (read_directory): Keep the stats of files that were there before. (Reported by Clint O.)
    • install.pl: Start move to new pod2html ids and some fixes.
    • pod/*.pod: Complete documentation of all options. Generate more readable index using new pod2html ids for all pods where it makes sence.
    • makepp: Complete --help generated from pod/makepp_command.pod.
  • 2010-06-01 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Signature/c_compilation_md5.pm (md5sum_c_tokens): Find terminating ' to avoid missed rebuilds.
    • Mpp/Rule.pm (execute_command): fork/exec on Cygwin and MinGW like on Unix.
    • Mpp/CommandParser/Gcc.pm (xparse_command):
    • Mpp/Scanner.pm: Eliminate useless add_dependency.
    • Mpp/Text.pm (pattern_substitution): Optimize.
    • pod/makepp_compatibility.pod: Add 5.12.1 and more CPAN-tester results.
  • 2010-04-22 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.100422.tgz, version 1.50-04221-02242-02094 on CPAN.
    • Mpp/Utils.pm (Mpp::Rewrite::cwd): Work around a 5.12.0 crash.
    • install.pl, pod/makepp_compatibility.pod: Mention 5.12 as working.
    • pod/makepp_command.pod: Mention --sandbox as a workaround for -j on native Win.
  • 2010-02-25 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm (parse_rule):
    • t/rule_include.test: Use :scanner none if :include file found.
    • makepp (parse_command_line): Order options alphabetically.
    • makepplog (instdir): Erstwhile workaround for 5.11 deprecation.
    • pod/makepp_rules.pod, pod/makepp_faq.pod: Update about new behaviour of :include.
    • pod/makepp_repositories.pod: Remove long outdated limitation of only parsing the 1st command of an action. Explain about --dont-read.
    • pod/makepp_compatibility.pod: Add more tested versions.
  • 2010-02-09 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Makefile.pm (parse_rule):
    • makepp (build_target_done):
    • Mpp/FileOpt.pm (set_additional_dependencies): Handle :include of generated dependency file. (Suggested by Yoni Londner) (get_rule): Remove unneeded label colliding with a reserved word in Perl 5.11.
    • Mpp/Subs.pm (scanner_none):
    • Mpp/ActionParser.pm (parse_rule): Keep promise that scanner none shuts up.
    • Mpp/Rule.pm (sorted_dependencies): Use only NAME for same dependency given multiply.
    • t/rule_include.test: New test.
    • install.pl (highlight_keywords): Handle :include & :last_chance.
  • 2009-12-27 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Subs.pm (scanner_skip_word): Make it work per rule. (s_register_scanner): Make prefix "scanner_" optional and allow "-".
    • Mpp/Makefile.pm (parse_rule): Allow "-" in :scanner.
    • Mpp/ActionParser.pm (parse_rule): Suppress "action scanner not found" warning with skip-word. Clearer suggestion.
    • Mpp/Rule.pm (parser): Simplify.
    • t/additional_tests/2009_12_27_skip_word_unix.test: New test.
    • pod/makepp_command.pod: Mention primacy of RootMakeppfile.
    • pod/makepp_rules.pod: Explain pitfall of :scanner.
    • pod/makepp_scanning.pod: Mention all command parsers explicitly.
    • pod/makepp_statements.pod (register_scanner): Mention changes.
  • 2009-09-25 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Some (only Solaris?) perls hang when changing $0 before %ENV.
    • makeppclean (deletable):
    • Mpp/FileOpt.pm (load_build_info_file):
    • t/additional_tests/2004_12_14_clean.test: Fix regression about cleaning files modified outside of mpp.
    • Mpp/Makefile.pm (skip_makefile_until_else_or_endif) (_read_makefile_line_stripped_1):
    • t/builtins.test: Have exactly 1 space for continuation \, gmake compatibility issue reported by Adam McLaurin.
    • recursive_makepp: Optimize reading.
  • 2009-07-16 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Text.pm (pattern_substitution): Remove gmake incompatible restriction of needing % in patsubst replacement. (Thanks to Jason Kankiewicz.)
    • Mpp/Subs.pm (f_info): Provide missing function. (f_basename, f_dir, f_dir_noslash, f_join, f_notdir, f_sort) (f_subst, f_suffix): Optimize.
    • Mpp/Recursive.pm: Move traditional-rec end message here.
    • install.pl: Check for V5.6 before any compiler errors kick in.
  • 2009-03-19 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp, makeppreplay: Use __DATA__, to fix --help.
    • Mpp.pm (log): Try unwritable logfile only once.
    • config.pl, install.pl: Provide $DESTDIR for Gentoo's indirect install.
    • t/run_tests.pl: Give hints when tests fail.
    • Mpp/Utils.pm: Rename package Rewrite to Mpp::Rewrite.
    • Mpp/FileOpt.pm (version): Don't put DOS newline into $VERSION if unpacked wrongly.
  • 2009-02-21 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.090221.tgz, version 1.50-02212-021122-02107 on CPAN.
    • Mpp/Makefile.pm (expand_variable):
    • Mpp/Subs.pm (s_global): Rename package global to Mpp::global.
    • makeppgraph, makepplog, Mpp/Utils.pm, t/log_graph.test: Rename package Rewrite to Mpp::Rewrite.
    • install.pl: Don't put DOS newline into $VERSION if unpacked wrongly.
  • 2009-02-12 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/File.pm: Export generously, saving a lot of qualifying all over.
  • 2009-02-10 Daniel Pfeiffer <occitan@esperanto.org>
    • Huge change: all symbols in package main moved to package Mpp. Mpp/Frame.pm becomes Mpp.pm.
  • 2009-02-09 Daniel Pfeiffer <occitan@esperanto.org>
    • Huge change: all modules moved to package Mpp.
  • 2009-02-06 Daniel Pfeiffer <occitan@esperanto.org>
    • BuildCheck/exact_match.pm: Move options for subclasses into singleton, saving silly wrappers.
    • BuildCheck/symlink.pm: Remove deprecated check.
  • 2009-02-03 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm, Makesubs.pm: Cleanly separate these modules, and make the latter "our" based.
  • 2009-01-31 Daniel Pfeiffer <occitan@esperanto.org>
    • Mpp/Frame.pm: New module picks up many things that used to be in makepp.
    • makeppreplay: Use new module to handle signals properly and do logging.
    • Makecmds.pm (print): Respect --sync-lines in replacement (but not in input file).
  • 2009-01-08 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp, Rule.pm, FileInfo_makepp.pm: Handle all variants of symlink changes. With --rm-stale also rm files whose stale dependencies get rm`ed, or where it can't initially be decided if it's really stale.
    • BuildCheck/exact_match.pm: Extend arch-change explanation to any similar pairs.
    • makeppreplay (load_build_info_file): A single DEP_SIGS looks like a content_based sig, but isn't.
    • t/run_tests.pl: Add page break between makepp* invocations and backup log files.
    • t/additional_tests/2009_01_08_symlink.test: New test.
    • t/additional_tests/2004_04_01_stale_repository.test:
    • t/additional_tests/2004_11_02_repository_rmstale.test:
    • t/additional_tests/2004_03_31_stale.test: Test more stale files being removed.
    • pod/makepp_statements.pod: Document how to debug perl {}.
  • 2008-12-21 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Fix -c. (perform): Concat current to previous error message and don't say "no update necessary" when we abort with an error.
    • stress-test.pl (StressTestUtils.pm): Make it a normal module so it can be loaded by mppr.
  • 2008-12-14 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50.081214.tgz, version 1.50-12149-11231-10151 on CPAN.
    • makeppreplay, FileInfo_makepp.pm, Makefile.pm, Rule.pm
    • Scanner.pm: Update mppr-modified or -recognized build infos, and mark them with new info RESCAN.
    • ActionParser.pm (parse_rule): Remember relative path for &cmd source.
    • Makesubs.pm (%scanners): Recognize all known Shells.
    • Makecmds.pm (&cp): New opt --symlink.
    • makepp (build_target_done): Calculate SORTED_DEPS and DEP_SIGS only once, because they are the same for all targets.
    • makeppinfo: Warn about missing files, but show build info even if sig mismatches. In that case don't show SIGNATURE.
  • 2008-11-23 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppreplay, t/makeppreplay.test: New very fast command and test.
    • makepp, FileInfo_makepp.pm, Makefile.pm, Rule.pm, Utils.pm: Support makeppreplay by differentiating via new constant MAKEPP.
    • FileInfo.pm: Don't leave testfile on Windows.
    • ActionParser.pm (parse_rule): Use simpler filename accessor.
    • makeppbuiltin, makeppgraph: Support Perl style -Mmod=arg,...
  • 2008-11-02 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: Default of running only basic tests works again. Each test now gets its own tdir, to avoid (Windows) problems where it couldn't be cleaned because it was randomly locked. ($source_path): "our" for finding builtins.test. (-b, -k, -m, -n & -s): New options.
    • t/run_all.t: Path to makepp and -n moved to run_tests.pl. '--' passes through options.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: Adapt to run_tests change.
  • 2008-10-15 Daniel Pfeiffer <occitan@esperanto.org>
    • Mention Strawberry Perl as working.
    • makepp: Rewrite on Win ActiveState only up to 5.8.6.
  • 2008-09-28 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (find_root_makefile_upwards): When importing a RootMakeppfile from a repository, check that this hadn't been done previously in a lower directory.
    • ActionParser.pm (parse_rule): Add dependency on user perl command in such a way that it will not occasionally be temporarily dropped.
    • makepp (build_dependencies_done): Fix evaluation order.
    • Glob.pm, FileInfo.pm (dir_stat_array):
    • FileInfo_makepp.pm (build_info_string): Optimize.
  • 2008-09-02 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm, FileInfo_makepp.pm, Makefile.pm, Makesubs.pm: Make EXISTS be undef/exists based, to save quite some memory.
    • Repository.pm (symlink): Move here from FileInfo.pm, as nobody else uses it.
  • 2008-09-01 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp, FileInfo_makepp.pm, Rule.pm, makepplog
    • t/additional_tests/2004_04_01_stale_repository.test: Handle stale symlinks in, via or without repository cleanly.
    • BuildCheck/exact_match.pm: Use cheaper "unless".
    • makeppgraph (--up, --down): Accept these advertised options.
    • pod/makepp_functions.pod: Fix find-program doc to "not-found".
  • 2008-08-19 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (exists_or_can_be_built_or_remove): Treat chmod 0 as inexstant, rather than internal error.
  • 2008-08-09 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50-cvs-080810.tgz, version 1.50-08093-08048-07303 on CPAN.
    • BuildCache.pm, FileInfo*.pm: Use POSIX::S_IS* instead of hard wired non portable constants.
    • pod/makepp_release_notes.pod, pod/makepp_compatibility.pod: Document z/OS as mostly working.
  • 2008-08-04 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm, t/perl.test: Abolish the undocumented fancy renaming of only '.' to '_dot_'.
    • makepp (find_makepp_info, ..._register): Abolish wrapper useful only when FileInfo was object oriented.
    • Makesubs.pm: Directly get my $cwd, when that was all $makefile was used for.
    • *: Don't call unquote_split_on_whitespace in loops which can call both parts directly. 'my $x =' and '$x =~' is cheaper than 'local $_ =' is cheaper than 'local *_ = \' is cheaper than 'for'.
    • t/builtins.test: Test &cut -p.
    • t/run_tests.pl: Use getopts and make installed makepp or mpp testable again.
    • t/run_all.t (-?, -S): New options.
  • 2008-07-30 Daniel Pfeiffer <occitan@esperanto.org>
    • ActionParser.pm (add_any_dependency_):
    • BuildCheck/exact_match.pm (build_check):
    • Glob.pm (zglob_fileinfo):
    • Makefile.pm (load):
    • Scanner.pm (find):
    • FileInfo.pm (file_info): Handle simple file names efficiently. (path_file_info): Renames old file_info. No longer takes a ref -- adapted the three calling places. Handle C:\temp/foo on Windows and //bin/ls not as a server share.
    • FileInfo_makepp.pm (update_build_infos): Inline minimal file_info.
    • Makesubs.pm (f_*_filename): Optimize.
    • t/run_tests.pl (un_spar): Simplify.
    • pod/makepp_builtins.pod, t/builtins.test: Document and test -r0.
  • 2008-07-19 Daniel Pfeiffer <occitan@esperanto.org>
    • Repository.pm: Revert code to package FileInfo, because it uses it so much, and because some symbols hadn't been qualified.
    • FileInfo_makepp.pm (version): Give same output as installed beta.
    • config.pl, t/: Renames makepp_tests for conformance with Perl test frameworks.
    • t/run_all.t: Send mail with details only when run by CPAN testers.
    • pod/makepp_compatibility.pod: Add findings of CPAN testers.
    • t/wildcard_repository.test, pod/makepp_repositories.pod: chmod 0 masking doesn't work for user root.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: Be more robust about finding base test.
    • t/log_graph.test: Rewriting rules need a minimum directory depth.
    • t/spar, t/additional_tests/spar_unix.test: Give better warnings.
    • install.pl, t/run_tests.pl, makepp: Move rewriting for broken perls to uninstalled makepp, to be sure it gets performed before running.
  • 2008-07-09 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (scanner_c_compilation, scanner_gcc_compilation):
    • Makefile.pm (load):
    • ActionParser.pm (find_command_parser):
    • CommandParser/Gcc.pm (new_no_gcc, xset_preproc_vars):
    • CommandParser/Esqlc.pm (new):
    • CommandParser/Vcs.pm (xparse_command): Handle difference between gcc and others via regexp, due to the many names (sometimes including version numbers) gcc can take. And only put deviating entries in per-Makefile scanner hash.
    • Makefile.PL, t/run_all.t: New files.
  • 2008-06-03 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (f_origin): Simplify. (%perl_unfriendly_symbols):
    • Makefile.pm (expand_variable): Inline $(*F) et al, to save a few subs. Allow value to be a string.
    • CommandParser/Esqlc.pm (parse_arg): Also depend on config file.
    • ActionParser.pm, CommandParser.pm, FileInfo_makepp.pm, Rule.pm
    • makepp: Don't use list slices, as they are even more expensive than modifying @_.
  • 2008-06-02 Clemens Hintze <c.hintze@gmx.net>
    • Makesubs.pm (f_call): Add new make function with similar functionality as in GNU Make. One may use this function to expand a variable's contents as a macro.
    • t/variable_expansion.test (misc_gnu_make_functions): Add tests for new builtin function 'f_call'.
    • pod/makepp_functions.pod: Describe the new builtin function 'f_call'.
    • pod/makepp_incompatibilities.pod: Remove the reference to $(call) in the incompatibilities to GNU Make.
    • install.pl: Add 'call' as keyword to be highlighted in html doc.
  • 2008-06-01 Daniel Pfeiffer <occitan@esperanto.org>
    • t/additional_tests/2004_04_01_stale_repository.test:
    • FileInfo_makepp.pm (load_build_info_file):
    • pod/makepp_repositories.pod: Remove logic whereby a file stayed rep based without being respecified as such. This was bad because as the rep evolved, the build tree would stay based only on what remains of the old part, not noticing new files. Also it was badly implemented, because it would not notice if the file should now come from a higher priority rep.
    • Repository.pm, RecursiveMake.pm, FileInfo_makepp.pm, Makefile.pm
    • Makesubs.pm, install.pl, Rule.pm, makepp: Move all functions needed only for repositories or recursive make to separate modules.
    • t/run_tests.pl, makepp (makepprc): Look for and load file .makepprc. (usage): Inline it, putting text into DATA section to save memory.
    • Makecmds.pm (frame):
    • TextSubs.pm (getopts): Optimize and handle -A only centrally.
    • BuildCache.pm:
    • FileInfo.pm (STAT_VECTOR): Eliminate const which wasn't getting inlined. (STAT_GID, is_writable): Eliminate const which was only used for a single dir. (STAT_DEV, lstat_array): Store it only on dirs, as it never got used for files.
    • CommandParser/Gcc.pm (xparse_command): Repair -idirafter.
    • recursive_makepp: Don't make protocol error give a perl warning.
  • 2008-05-24 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (split_actions, execute_command):
    • ActionParser.pm (parse_rule): Change split_actions again for even less string copying.
    • makepp (build_dependencies_done, build_target_done):
    • Makesubs.pm (f_MAKE): Don't match every action for recursive_makepp up to three times, unless we actually expanded $(MAKE).
    • **/* (FileInfo::case_sensitive_filenames): Constant replaces var for saving very many run-time checks, overridable by environment var MAKEPP_CASE_SENSITIVE_FILENAMES.
    • t/additional_tests/2007_08_15_no_extra_fork_unix.test: Ascertain that we exec even if an empty expansion follows.
  • 2008-05-21 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (split_actions): Change return value for less copying. (execute_command): Less copying and adapt to split_actions.
    • ActionParser.pm (parse_rule): Less copying and adapt to split_actions.
    • TextSubs.pm (::PERL): Default to $^X.
    • install.pl: Use standard ::PERL. (substitute_file): Copy to mpp* where linking fails. Create .bat wrappers on MSWin.
    • config.pl: Introduce short opts, protect $ in Makefile and eliminate 5.6 prompts to make it testable.
    • t/additional_tests/2008_05_21_install.test: New.
    • pod/makepp_speedup.pod (--gullible): Clarify better.
    • pod/makepp_command.pod: Give examples what accidents a RootMakeppfile and the new non-nesting policy prevents.
  • 2008-05-17 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50-cvs-080517.tgz, version 1.50-051710-05101-05084 on CPAN.
    • Rule.pm (exec_or_die, execute_command):
    • MakeEvent.pm (start):
    • makepp (END, @close_fhs): Also put in STD* for correct file handling with _exit. Flush before fork in 5.6.
    • Makesubs.pm (f_MAKE): Allow recursion on Cygwin.
    • t/recursive_make.test: Rename without '_unix'.
    • Makecmds.pm (c_template): Rewrite so as to not handle @@ before earlier @ on same line.
    • t/run_tests.pl: Improve diagnostics. (no_md5): New constant. (system_intabort): Optional argument to die with proper message. (makepp): Make it interruptible. (slow_rmtree): New hopefully safer function.
    • TextSubs.pm (::is_perl_5_6): New constant. (::is_windows): Centrally define it here.
    • FileInfo.pm, makeppclean, makeppgraph, makeppinfo, makepplog
    • Utils.pm: Ensure that HOME is set centrally in FileInfo.pm.
  • 2008-05-10 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (perform):
    • Makesubs.pm (f_mktemp):
    • MakeEvent.pm (start): Also fork on Cygwin and MinGW, but not Win ActiveState. Cleanup mktemp files which only subprocess knows about.
    • t/builtins.test: Use RootMakeppfile to be sure where install logs go.
    • t/parallel.test: Rename without '_unix'.
    • **/*: Win fixes.
  • 2008-05-08 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: Change link checking such that even Win ActiveState can test build cache. Skip Shell scripted tests where we don't have a Shell. Abort if aaasimple fails. Report more single letter skip reasons when dotting.
    • FileInfo.pm ($stat_exe_separate): New var for Win.
    • Makesubs.pm (f_find_program): Be smart about appending .exe.
    • makepp_builtin_rules.mk: Change the Windows xyz - xyz.exe magic, so you can put deps on xyz. This still doesn't support an install target that picks up xyz.
    • * (is_windows): Differentiate ActiveState as 1 with a Shell, else as 2.
    • **/*: Lots of little fixes to support Cygwin and MinGW MSYS well, and pass most tests with Win ActiveState.
  • 2008-04-26 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm, Utils.pm:
    • Makefile.pm (_truthval):
    • ActionParser.pm (find_command_parser):
    • makepp: Ensure that HOME is set. Enhance is_windows: negative means Unix-like (Cygwin, MinGW MSYS), positive means Shell- and coreutils-less (ActiveState).
    • FileInfo.pm (is_writable): Revert to immediately deleting testfile.
    • Makecmds.pm (run_forked): Eliminate obsolete function.
  • 2008-04-18 Daniel Pfeiffer <occitan@esperanto.org>
    • makepplog (instdir),
    • makepp_builtin_rules.mk,
    • ActionParser.pm (find_command_parser),
    • FileInfo.pm (file_info),
    • t/run_tests.pl (makeppextra.pm),
    • t/**/*.test: Adapt to native Windows.
    • Makesubs.pm (%Makesubs::scanners): Add dietlibc and .exe forms. (f_find_program): Also do full path from relative path and return .exe iff full path requested. (%perl_unfriendly_symbols): $/ new variable.
    • FileInfo_makepp.pm (_valid_alt_versions): Make ALTERNATE_VERSIONS be exists() based.
    • makepp (build_dependencies_done),
    • Rule.pm (execute): Remove redundant call to may_have_changed.
  • 2008-04-15 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (flush_log): Don't autovivify $logfh: (perform): Clean up end messages.
    • Makefile.pm (_truthval): Less string manipulations and always be case sensitive on ifsys. (load):
    • pod/makepp_command.pod: Check for nested RootMakeppfiles and explain why.
    • Rule.pm (execute_command): Remove redundant flush.
    • Makesubs.pm (f_find_program):
    • t/additional_tests/2003_10_11_idash.test:
    • t/md5.test: Fix executable dependency on Win.
    • makepp_builtin_rules.mk:
    • t/log_graph.test: Guard against both Win compilers being 'cl' (which gave 'ifeq cl cl'), and don't pass it the deprecated -o option. Fix renamed percent_subdirs.
    • t/changed_inputs.test, t/verilog.test: Port to native Win.
    • t/run_tests.pl: Handle PATH in native Win syntax.
  • 2008-02-24 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (propagate_interrupts): Drop unused sub. (build): Fix dont_build handling, so it gives a warning when an inexistent file was specified, for which we might have found out later it's phony. (load_repository_recurse): Only loop once, and don't recurse into single files.
    • FileInfo_makepp.pm (exists_or_can_be_built),
    • Rule.pm (load_scaninfo): Check if we have ALTERNATE_VERSIONS.
    • t/additional_tests/2004_03_26_exit_status.test,
    • Makesubs.pm (f_shell): Like gmake, don't fail if cmd fails.
    • pod/makepp_rules.pod (Special characters): Clarify quoting.
  • 2008-01-06 Daniel Pfeiffer <occitan@esperanto.org>
    • pod/makepp_compatibility.pod: Add 5.10.0 tests.
    • FileInfo_makepp.pm (get_from_rep): Count rep_hits only when actually fetched.
    • Makesubs.pm (%scanners): Add Parasoft Insure++.
    • install.pl: Also install new makeppinfo.pod.
    • makepp: Remove autoload comment, which can't work due to my-vars. (log): Don't start subprocess for --no-log.
    • makeppgraph, t/log_graph.test: Make dot-nodes almost opaque, rather than almost transparent.
    • Utils.pm: Use the long command name for messages and $MAKEPP*FLAGS.
  • 2007-12-14 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp ($progname): Set to constant 'makepp'. (%automake_garbage): Make it exists() based. (build_dependencies_done): Log UP_TO_DATE => $all_targets. (build_target_done): Don't swallow message if $implicit_phony. (perform): Don't say "targets failed" as last words, when there were none. Also mention rep and BC imports, to keep superficial people from wondering.
    • FileInfo_makepp.pm (get_from_rep): New name for move_or_link_target, which neither moved, nor was restricted to targets. (load_build_info_file): Unlink corrupt build info, or it can stay around for ever.
    • Makecmds.pm (print): Use much faster syswrite. (&cp, &mv, &ln): Assume cwd as dest, if only one arg given, as does Unix ln.
    • Rule.pm (build_cache): Small optimization.
    • makeppgraph (--graphviz): Make nodes translucent and put edges behind. (--html): New format.
    • makepplog (N_REP_HITS): New key.
  • 2007-10-22 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppinfo (--traverse): Don't recurse unless given twice.
    • Glob.pm (wildcard_action_shared): Eliminate to reduce stack manipulation.
    • FileInfo.pm (lstat_array): Optimize. (is_symbolic_link, stat_array): Call lstat_array only if needed.
    • pod/makepp_faq.pod (unnecessary recreation): Extend point.
  • 2007-10-18 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (file_info): Properly dereference dirs, preventing a chain of links giving an absolute_filename as though it was root. Reproducible in real build, but not narrowed down, so no test case.
    • makepplog (--keys): Allow ^ instead of ! as some shells swallow that.
    • makeppinfo (--keys, --quiet, --traverse): New opts.
  • 2007-10-06 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_cat): Ensure sync lines start at bol.
  • 2007-09-27 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (load_repository): Die if rep not found.
    • makepplog (-t, --tabulate): New option.
    • install.pl, makepp* (@BASEVERSION@): New var and complete doc.
    • Makecmds.pm (print, frame):
    • t/builtins.test: Ensure sync lines start at bol.
  • 2007-09-18 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Also count phonies without action (the usual case), output them in N_FILES and output a short statistic if something was built, as a final acknowledgement (all colleagues want this ;-).
    • makepplog, **.test: Also output phonies in N_FILES.
    • Scanner.pm (find):
    • BuildCheck/exact_match.pm (build_check): Protect against autovivifying DIRCONTENTS.
    • Makesubs.pm (f_find_program): Handle .exe for ActiveState on Win.
  • 2007-09-13 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser/Gcc.pm (%info_string): Also remember libs.
    • Rule.pm (load_scaninfo_single): Don't turn on should_find for libs behind the back of the scanner.
    • makepplog (FILE): Fix last extension to not accumulate all CACHED_DEPs.
    • pod/makepp_variables.pod: Document a few makepp_* vars.
  • 2007-09-07 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser/Gcc.pm, CommandParser/Vcs.pm, Makesubs.pm (@system_include_dirs): List of strings, instead of converting back on each access. (@system_lib_dirs): New var to prevent newly appearing warning.
    • makepplog (FILE): Merge the often numerous adjacent CACHED_DEP messages into one.
    • Makefile.pm (assign): Handle &= like += eliminating an error through inconsistent var handling.
    • BuildCacheControl.pm (group): Workaround for a bug in some Solaris 5.6.1 versions.
  • 2007-09-05 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (build): Print and return an error when a dont-build doesn't exist. (build_target_done): Check new variable $(makepp_require_phony) to see whether to allow implicit phonyness. This variable should be on by default, to prevent broken dependency chains, but that would break backward compatibility with sloppy makefiles.
    • t/additional_tests/2004_03_03_minusk.test: Check that we fail when --dont-build doesn't exist and optionally when a non-phony file didn't appear.
    • Rule.pm (execute_command): Replace $File::maybe_open with $unsafe, and also use it to cd back if more actions are performed.
    • Makecmds.pm: Use $Rule::unsafe.
    • CommandParser/Gcc.pm (xparse_command): Also understand .obj and .dll.
    • t/additional_tests/2007_05_15_autoload.test: Don't rely on Shell having a source command.
  • 2007-09-04 Anders Johnson <ajohnson@nvidia.com>
    • CommandParser.pm, makepp, t/c_compilation.test:
    • pod/makepp_command.pod: Add --no-path-executable-dependencies.
    • FileInfo.pm, t/additional_tests/2003_11_25_wild.test: Fixed a couple of places in which the name of $root was misrepresented as '//' instead of '/'.
    • Makefile.pm, t/conditionals.test:
    • pod/makepp_statements.pod: Add iftrue statement.
    • Rule.pm: Issue warnings for missing include files when replaying cached scanner info. (The current heuristic for determining when to do so is less than ideal.)
    • t/additional_tests/2007_08_15_no_extra_fork_unix.test: Resurrect SLEEP option, and update a stale comment.
  • 2007-08-23 Daniel Pfeiffer <occitan@esperanto.org> (checked in 2007-09-05)
    • t/additional_tests/2004_02_19_repository_change.test:
    • t/additional_tests/2004_03_24_scanner_c_lib.test: Dry run when testing relevance.
    • t/additional_tests/2007_01_31_build_check_ignore_action.test: Don't rely on /usr/bin/perl being available.
    • t/additional_tests/2007_08_15_no_extra_fork_unix.test: Don't start Shell command with metacharacters, as some shells will implicitly exec it, making ppid be that of makepp itself.
    • t/additional_tests/2007_02_02_md5_bchk_phony_dep.test: Rename from 2007_02_02_build_check_phony_dep.test for md5 skipping.
  • 2007-08-22 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppgraph (-p, --plain, -s, --separate-directions, -t) (--text): New options and format.
    • t/log_graph.test: Test new options and text format.
    • t/additional_tests/2004_03_12_condscan.test: Handle .obj and integrate stucturally similar 2006_03_21_smartscan.test and 2006_03_23_c_comments.test.
  • 2007-08-22 David Wojtowicz <wojtow@users.sourceforge.net>
    • Makefile.pm (parse_rule): Understand pseudo dot targets like .PHONY on case insensitive filesys.
    • makepp (perform): Pass 2 vars by ref to getopts making options work again.
  • 2007-08-20 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo_makepp.pm:
    • t/additional_tests/2007_08_20_phony_include.test: Use 'exists ...{IS_PHONY}' instead of '...{IS_PHONY}' for all of the 2007-08-16 changes.
  • 2007-08-16 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm (cache_file), makepplog: Add cache filename to log messages for populating the cache.
    • FileInfo_makepp.pm (get_rule), Makefile.pm (load), Makesubs.pm:
    • makepplog, pod/makepp_statements.pod:
    • t/additional_tests/2007_05_15_autoload.test: Add s_autoload.
    • CommandParser.pm (parse_command), Makesubs.pm (f_find_program): Don't add executable dependencies for built-ins, and don't consider autoloads or last chance rules for executables in the PATH.
    • Makesubs.pm (f_first_available, f_foreach): Use the directory of the current makefile, which is not necessarily the same as the current directory. Die instead of leaving a literal `$(foreach)' to be interpolated later, because that can cause nasty problems if it isn't.
    • FileInfo_makepp.pm (move_or_link_target, update_build_infos):
    • makepp, makepplog, pod/makepp_command.pod:
    • t/additional_tests/2003_12_05_phony_repository.test:
    • t/additional_tests/2007_01_31_build_check_ignore_action.test: Add --symlink-in-repository-as-file and --virtual-sandbox. Keep track of build cache hits. Never suppress `Imported... from build cache', because that makes it too mysterious.
    • FileInfo_makepp.pm:
    • t/additional_tests/2007_05_09_dont_build.test: Don't keep searching for rules that have already been built. Don't consider a phony target as a buildable file, even if there is a rule to build it. Die if a source file is also a phony target, because there is no safe action in that case. Shortcut set_rule when the file is set for dont-build. Phony targets can be stale too. Allow the removal of stale repository links outside the sandbox (possibly risky, but better than the alternative).
    • Makefile.pm (load, assign, parse_assignment, parse_rule):
    • t/last_chance.test: Die if the attempt to build a makefile fails. A target-specific assignment has the scope of the current expression and its sub-expressions, but *not* of any other espressions that happen to be evaluated in the process. Verify that a last chance target matches at least one of its patterns.
    • Rule.pm (exec_or_die):
    • t/additional_tests/2007_08_15_no_extra_fork_unix.test: Don't do an extra fork on the last action unless there is something to do afterwards.
    • Scanner.pm (add_include_suffix): Avoid inadvertent modification of multiple suffix lists through a reference (which is now possible because suffix lists are cached and shared).
    • CommandParser/Vcs.pm: Fix handling of -v and -y to match VCS.
    • TextSubs.pm (is_object_or_library_name, getopts):
    • pod/makepp_command.pod: Shared library name need not include a version number. Add --argsfile option.
    • BuildCheck/exact_match.pm (build_check):
    • t/additional_tests/2007_02_02_build_check_phony_dep.test: Suppress a warning. Update a comment.
  • 2007-08-02 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppgraph (@file_attr): Also highlight .obj and .dll.
    • t/stress_tests/build_cache_concurrent.test: Respect given time, clean as long as there are children, make forcing bc-copies controllable, don't create cache if one is specified and make cleaning optional so you can start this test multiply with a grouped cache.
    • t/additional_tests/*.test: Adapt to Windows native compilers.
    • t/log_graph.test: Integrate Windows variants by rewriting output rather than having a separate copy.
  • 2007-07-28 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50-cvs-070728.tgz, version 1.50-07281-07203-07172 on CPAN.
    • t/stress_tests/build_cache_concurrent.test: Only optionally fail on a collision, as it can take seconds to happen on a single processor, beyond default duration. Allow starting any number of concurrent makepps, for huge stress.
    • t/build_cache.test: Create a flat build cache and look for the files via Shell patterns, as find fails on Vista (probably picked up a useless non-Cygwin find).
    • t/md5.test: Check if it created .obj so it can also work with a Windows native compiler.
    • BuildCacheControl.pm (c_stats): New command.
    • pod/makepp_build_cache.pod: Remove deterring warning, since build caches are well tested in the meanwhile. Document stats.
    • makepplog: Don't hang if makepp got killed and produced a truncated log file. (-f, --follow): New option.
    • Dump.pm: Use standard suppression of import mechanism. Offer more rewriting and options.
  • 2007-07-20 Daniel Pfeiffer <occitan@esperanto.org>
    • MakeEvent.pm ($child_exited): Use cheaper undef for false. (process_finished): Mark failed non-CODE waiters as finished too, else they can hang. (wait_for): Simplify by using only one var, and maybe calling reaper directly.
    • makepp (perform): Don't sleep, event_loop does it for us.
    • FileInfo.pm (absolute_filename): Don't output root as empty. (file_info): Handle //server/share directly, instead of complicating the loop.
  • 2007-07-17 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (parse_build_info_file): Be a little less strict about what is a corrupt file, making this a lot simpler. (NEEDS_BUILD_UPDATE): Turn it into an exists flag. (build_info_fname): Don't call absolute_filename. (load_build_info_file): Unwind the convoluted conditions, which allows to checks less. (exists_or_can_be_built_norecurse, move_or_link_target): Cache BUILD_INFO so we don't load it twice.
    • makepp (build): Supply the dependency directly as the potential error value.
    • MakeEvent.pm (when_done): ERROR may be the status value. (start): Don't actually call CONST0.
    • Signature/c_compilation_md5.pm (md5sum_c_tokens): Parse strings more cheaply.
  • 2007-07-16 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (split_on_whitespace): Implement directly, instead of dragging args through a wrapper. (join_with_protection): Copy only strings we modify.
    • MakeEvent.pm (MakeEvent::Process::new): Since @pending_processes are ours, call start as a function, not via method lookup. (process_reaper): Pickup all defuncts as early as possible (they could hang around for minutes), then spawn new processes if available, and only then do internal chores.
    • FileInfo.pm: Rename SHORTEST_FULLNAME to FULLNAME to reflect recent change of semantics. (reset_shortest_fullname, traverse): Eliminate unused functions.
    • CommandParser/Esqlc.pm (parse_arg): Rename SHORTEST_FULLNAME to FULLNAME. Call dirinfo, instead of assuming it's already cached its value.
    • makepp (log): Rename SHORTEST_FULLNAME to FULLNAME.
    • Rule.pm (print_build_cwd): Optimize by initializing last_build_cwd and by knowing that we only leave dirs we have entered, so FULLNAME is set. (execute): Flush before copy.
  • 2007-07-15 Daniel Pfeiffer <occitan@esperanto.org>
    • MakeEvent.pm (*::start): Fix a MAJOR bug (as old as makepp's cvs history), whereby makepp -kj<n> would ignore failures if a later dependency of the same target succeeded. This would cause whatever output was there after a failure to be picked up as valid. (*): Pass an extra argument to start, to prevent the above fix, when juggling attributes to get the error handler run. (when_done): Make the order of arguments compulsory and allow only one function, which is how this was used anyway. This eliminates much copying and complex logic. (process_reaper): Don't pass argument to POSIX constant.
    • makepp (build): Don't go through when_done for undef handles. (perform): Don't butcher the last n-1 processes in makepp -kj<n>. This prevents the annoying [signal 15] messages after an error, intead building all that can be. Turns out this also prevents a race (introduced 04-12-18) where, when a process came back and made another startable, just as makepp was finishing, critical_sections would be increased again. This would either cause an endless loop or even make makepp uninterruptible. (print_profile): Eliminate msg stuff, now handled by caller.
    • Rule.pm (execute): Use File::Copy instead of printing line by line. (exec_or_die, execute_command): Don't copy cmd around, just for profiling. (find_all_targets_dependencies): Keep sub constant, by not using closure.
    • t/parallel_unix.test (z): New test case that -kj2 is now reliable.
  • 2007-07-04 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (read_directory, unlink): Also delete LSTAT and other info about actual file, as otherwise lstat_array won't set EXISTS and file_exists will fail even though the file had been lstatted successfully. (relative_filename): Cache relative pathes between directories.
    • BuildCheck/exact_match.pm: Copy only those parameters that actually get used.
    • t/run_tests.pl: Fix int in FileInfo too for HP/UX 64bits.
  • 2007-07-02 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (file_info): Let split remove trailing slashes.
    • BuildCheck/exact_match.pm (build_check): Check if file is in build_cwd, rather than calling file_info. (build_cache_key): Don't copy command twice. As we append NAME to the key anyway, store relative path of only the dir, and only if not '.'.
    • Scanner.pm (find): Check if file is in base, rather than calling file_info. Flatten if-nesting a bit.
  • 2007-06-29 Daniel Pfeiffer <occitan@esperanto.org>
    • Glob.pm (wild_to_regex, wildcard_action_shared): Anchor wildcards only at the beginning and/or (typically) at the end as needed and remember whether they are to span multiple directories. That way a typical wildcard becomes \.c$ rather than the old expensive ^[^/]+\.c$
    • FileInfo.pm (dereference): Eliminate the flaky heuristic whereby the shorter of the two names applies to both files. For one thing this could mean that makepp uses a different name as it discovers a shorter one. For another, if the build dir name was shorter than the repository name, when the repository file changed makepp would recreate the link as a cycle onto itself. This was documented as giving varying automounted directories a consistent name -- if there is a need for such a feature, it should be made reliable through explicit aliasing. (file_info): Optimize through less string copying. (publish): Optimize by not, just for anchoring, interpolating wildcard regexp into another one.
    • FileInfo_makepp.pm (get_rule): Optimize by not, just for anchoring, interpolating wildcard regexp into another one.
    • BuildCacheControl.pm (c_clean): Don't short circuit $found loop, so that chown or &$delete occur for all group members.
  • 2007-06-16 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (parse_rule): Use PATTERN_RULES instead of PATTERN_LEVEL to keep track of which rules were used to produce present file. This allows pattern rule chains of any length. (Bug #1738675 reported by Jeff Smith.)
    • FileInfo_makepp.pm (set_rule): Flatten the nesting of ifs. Use PATTERN_RULES.
    • Glob.pm (wildcard_action_shared): Optimize away intermediate copy.
    • t/pattern_rule.test: Test that we can have long chains of pattern rules, but that the same rule doesn't get applied twice.
    • makepp, TextSubs.pm (format_exec_args): As a few systems (including Solaris) still have a Posix uncompliant Bourne Shell under /bin/sh, look for XPG4 Shell.
    • pod/makepp_variables.pod (SHELL): Document it and its various default values.
  • 2007-06-12 Daniel Pfeiffer <occitan@esperanto.org>
    • BuildCacheControl.pm (c_clean): New options --newgrp and --symlink-check. Wipe build info with no member. Reset atime only if we read the file, as this messes up ctime. (c_show): Don't complain about --sort when --verbose.
    • pod/makepp_build_cache.pod: Document new clean options.
    • TextSubs.pm (format_exec_args): Allow negating a command with "!".
    • t/conditionals.test (Makeppfile): Test that ! is executable.
    • Makecmds.pm (frame): Die on unreadable input files. (print): Repeat #line when outputting a multiline text from same source line.
  • 2007-06-07 Daniel Pfeiffer <occitan@esperanto.org>
    • BuildCacheControl.pm: Document new base functions. (groupfind): Slight optimization. (c_clean): New option -i, --build-info-check, no longer performed automatically, as it's fairly expensive. Remove option warning unreachable since -M was introduced (2006-06-24). Make build info signature match member mtime again.
    • BuildCache.pm (cache_file): Move mkdir incoming to mppbcc create. For copies try to retain mtime, from mppbcc clean also atime.
    • BuildCheck/exact_match.pm (build_cache_key): Again change / substitute from option like `-' to `%'.
  • 2007-06-02 Daniel Pfeiffer <occitan@esperanto.org>
    • BuildCacheControl.pm (c_clean): Create inter BC links for build info files with .mk suffix in every case, making the signature match again. (c_show): New option -s, --sort. By default sort by name and age. Add number of copies and symlinks for grouped BCs.
    • pod/makepp_build_cache.pod (show): Describe new stuff thoroughly.
  • 2007-05-29 Daniel Pfeiffer <occitan@esperanto.org>
    • BuildCacheControl.pm (c_clean): Copy fields to new files, making chown work again, and preventing warnings. (c_create): Test symlink with filenames that can't exist, not even when forcing recreation of an existing bc.
    • t/additional_tests/2006_09_20_build_cache_none.test: Test grouped bc.
    • Makecmds.pm: Add -S, --synclines option to all filters except sort. (print): New function. (c_cut): INCOMPATIBLE CHANGES: Adapt --lines to count from 1, as Perl and #line directives do. Fix lines to count per input file. Change --matching and introduce -s, --only-delimited, with Posixly correct default behaviour when not given.
    • Makefile.pm (read_makefile): Support &preprocess -S.
    • BuildCheck/exact_match.pm (build_cache_key): Change / substitute from file system atypical `=' (which some ls jaggedly show as `\=') to `-'.
    • makepp (log): With mpp -v, don't try to start inexistent mpplog.
    • pod/makepp_sandboxes.pod: Remove assertion that filesystem root is marked --dont-build, as it doesn't seem to be true.
  • 2007-05-25 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppclean (deletable): Guard against stale inter-build-cache symlinks.
    • BuildCacheControl.pm: MAJOR REWRITE to support BC groups by way of inter-BC symlinks on file systems which allow hard linking to them and copies elsewhere. (c_show): New option --pattern. New format vaguely like ls -l. Old format now requires --verbose.
    • BuildCache.pm (new): Move creation to BuildCacheControl, and allow that to load an augmented option file. ($options_file): Renames $build_cache_options_file to avoid redundant package name. (cache_file): Use precalculated MKDIR_OPT. (lookup_file): Don't copy return value around. (copy_from_cache): Use predetermined DEV. Guard against undef from stale intra-group symlinks.
    • makepp (print_error): Use ::log to guard against early invocations, before the fh is set up.
    • TextSubs.pm (getopts): Don't issue same short opt verbose message twice.
    • t/additional_tests/2006_09_20_build_cache_none.test: Add dummy build_cache_options.pl to make it a valid BC.
    • t/run_tests.pl (hpux): Also fix BuildCacheControl.pm.
    • pod/makepp_build_cache.pod, pod/makepp_release_notes.pod: Document build cache grouping.
  • 2007-05-17 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser/Basic.pm, ActionParser.pm, Makesubs.pm:
    • CommandParser.pm: Eliminate CommandParser::Basic, the only purpose of which was to mimic the base class.
    • install.pl: Eliminate CommandParser::Basic, the only purpose of which was to mimic the base class. Highlight mpp* and upcase faq.
    • pod/makepp_faq.pod: Add 2 questions.
    • pod/makepp.pod, pod/makepp_command.pod: Mention mpp.
  • 2007-05-14 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppinfo: New build info reader.
    • Makesubs.pm (f_find_program): Optionally return the path found.
    • CommandParser.pm ($ignore_exe): New variable to restore unreliable behaviour. (parse_command, add_executable_dependency): Fix reliability hole by also depending on the executable. This is not the right place to do it, because it only notices a path change when refiguring this out for other reasons. But at least it will notice when a new version got installed over the old one.
    • makepp: Use undef for false in getopts. (parse_command_line): Fix last change to --dump-makefile.
    • Makefile.pm (load): Adapt to --dump-makefile change. (parse_rule): Eliminate warning, which contradicted make compatibility. (_read_makefile_line_stripped_1): Fix comment in $((...)) in a line pushed back by previous rule.
    • Makecmds.pm: Use undef for false in getopts.
    • makeppbuiltin (getopts_help): Tolerate undef.
    • t/extra_dependencies.test: Test comment in $((...)) in a line pushed back by previous rule.
    • t/log_graph.test (makefile): Use $CommandParser::ignore_exe, because otherwise the log file would vary.
    • install.pl: Install makepp_faq and abbrevs consisting of 'mpp' plus the first letter of every following word, e.g. 'mppc' for 'makeppclean'.
    • pod/makepp_faq.pod: New (still modest) doc.
  • 2007-05-11 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_template): Match @{...}@ minimally and simplify slightly.
    • Rule.pm (execute): Don't create two almost identical closures.
    • install.pl: Add keywords to web pages.
    • t/builtins.test (&chmod): Exclude it only where it doesn't work.
    • makepplog (-?, --help): New option.
  • 2007-05-06 Daniel Pfeiffer <occitan@esperanto.org>
  • Snapshot makepp-1.50-cvs-070506.tgz, version 1.50-05065-04272-04245 on CPAN.
    • Signature/shared_object.pm (signature_shared_lib): Use own build_info_key.
    • pod/makepp_signatures.pod: Be more specific about how to activate :signature. Reorder signatures so that fallbacks have been explained before.
    • TextSubs.pm (skip_over_make_expression): Handle $[expr].
    • Makefile.pm (expand_text): Handle $[expr]. (_read_makefile_line_stripped_1): Handle multiline $[[expr]] and expand $[expr] if present. (unread_makefile_line): Inline it everywhere and eliminate.
    • Makesubs.pm (s_define): Allow comment after enddef and don't strip leading whitespace for GNU compatibility and for being able to define $[var] containing a rule.
    • Rule.pm (split_actions): Also ignore leading whitespace.
    • t/variable_expansion.test: Test $[expr].
    • t/run_tests.pl (test_loop): Inline execute for more precise diagnostics.
    • pod/makepp_variables.pod: Explain $[var].
    • pod/makepp_functions.pod: Mention $[fn ...] and $(&cat filename).
    • pod/makepp_statements.pod: Mention $(&cat filename).
  • 2007-04-27 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: With -v report when perl identifies itself as ActiveState build. (execute): Don't write error only to log file.
    • makepp (@close_fhs): New cleanup variable, replacing among others %dump_makefile. Adapt log and getopts incvocation to it.
    • Makefile.pm (load, dump_line): Convert to dirinfo->{DUMP_MAKEFILE}. (read_makefile_line, read_makefile_line_stipped): Shortcut copying each line to dump_makefile, when not dumping.
    • Makesubs.pm (f_shell_once, f_shell_global_once): Remove functions deprecated since 2006-07-02.
    • Makecmds.pm (run_forked): Deprecate function that offers little advantage over running a script externally.
    • pod/makepp_extending.pod, pod/makepp_release_notes.pod: Eliminate mention of run_forked.
  • 2007-04-24 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (move_or_link_target): Copy a symlink out of the repository, rather than linking to it, as would happen without special handling.
    • FileInfo.pm (is_writable): Don't remember "false" when dir doesn't exist, because that gets remembered until Signature::c_compilation_md5::signature is called on a file from a repository, which leads to FileInfo::signature wrongly being used, and hence unnecessary rebuilds.
    • makepp (load_repository_single): Reestablish storing symlinks in ALTERNATE_VERSIONS.
    • Makefile.pm (read_makefile): Allow using &commands without a rule, i.e. as statements.
    • t/load_makefile.test (outside): Test statement &commands.
    • ActionParser.pm (src_dir_name, add_any_dependency_): Inline function used only once in short function. Use relative_filename to remedy premature rename of "name" on 2006-11-18.
    • Scanner.pm (add_include_dir): Call ActionParser::relative_path directly.
    • CommandParser.pm (relative_path, src_dir_name): Eliminate uncalled functions.
  • 2007-04-20 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (expand_expression): Allow calling builtin commands as a function.
    • Makecmds.pm (run): Like elsewhere use $rule->{MAKEFILE} instead of accessor, so we can fake being inside a rule.
    • Makesubs.pm ($s_define): New var. (f_shell): Use it.
    • makepp (log): Fix makepp -v for last change of makepplog. (build_target_done): Use readlink, rather than derefence, which might follow more than one level, leading us beyond this action's input, e.g. onwards into a repository.
    • Scanner/C.pm (dont_scan, xscan_file): Undo optimization of build info on the dereferenced file, as that can make us try to write it outside our build tree, e.g. into the repository.
    • t/variable_expansion.test (define_test): Test retaining newlines depending on assignment type. (shell_command): Fix obscure bug where Linux sh overwrites instead of appending on a CIFS disk.
    • pod/makepp_*.pod: Document $(&command) and extension of define.
  • 2007-04-11 Ian Holmes <ihh@berkeley.edu>
    • Makefile.pm (parse_rule): Allow %-dependencies to not be the 1st one.
    • t/pattern_rule.test: Test %-dependencies which are not the 1st one.
  • 2007-04-11 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppclean (deletable): Also delete stale symlinks and leftovers.
    • stress-test.pl: Use strict and thereby fix some little bugs. Add new rule for converging by manually renaming files to *.multi.
  • 2007-03-24 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (expand_variable): Make builtin variables overridable from the enviroment.
    • TextSubs.pm (split_path): Don't use unquote as that also eliminates DOS dir separators.
    • t/run_tests.pl: Respect DOS PATH separator.
    • t/md5.test: Respect DOS dir separator.
  • 2007-03-20 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm: Use length as boolean op instead of expensively comparing to 0 or eq/ne ''.
    • BuildCache.pm (copy_check_md5): Integer instead of string comparison.
    • Makecmds.pm (frame): Improve ord() optimization.
    • Signature/c_compilation_md5.pm (md5sum_c_tokens): Reset newline count after #line.
  • 2007-03-15 Daniel Pfeiffer <occitan@esperanto.org>
    • Signature/c_compilation_md5.pm (md5sum_c_tokens): Protect the information in #line directives, don't pull non-word tokens onto a preprocessor line and optimize a bit more.
    • Makecmds.pm (frame): Small string optimizations.
    • BuildCacheControl.pm (c_clean): Always wipe corrupt members older than 10 minutes.
    • pod/makepp_build_cache.pod: Explain about corrupt members.
    • t/additional_tests/2006_09_20_build_cache_none.test: Adapt to changed behaviour and extend.
  • 2007-03-13 Daniel Pfeiffer <occitan@esperanto.org>
    • Signature/c_compilation_md5.pm (md5sum_c_tokens): Handle whitespace more aggressively including newlines around preprocessor statements.
    • BuildCacheControl.pm (c_clean): Workaround to fix linked file strategies.
    • Signature/shared_object.pm (signature_shared_lib): Fix filehandle, make it portable and replace expensive multi method usage by single direct call. I have chosen to put all uppercase types and "w" into the signature, because the details are not portable -- this might need fine tuning.
    • Makecmds.pm: Arm all prints against failure, because, thank Unix, FS full or quota exceeded, only return an error. This is unlike the previously handled broken pipe, which additionally signals.
    • makepp (build_dependencies_done): Eliminate map (emulating a grep) within a for clause.
    • Rule.pm (split2_): Replace by std split -1.
    • BuildCheck/exact_match.pm (_split1): Replace by std split -1. (build_cache_key): Replace expensive multi method usage by single direct call.
    • * (DIR_IN_REPOSITORY, IS_PHONY, SCANNED_FOR_SUBDIRS): Faster test and no memory by using existance as "true".
    • pod/makepp_signatures.pod: Bring up to date and hopefully make it clearer which method applies when.
  • 2007-02-28 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (_truthval): Log IFEQ instead of implementing a real parser that would only slightly improve a statement with such a lousy syntax (bug 1667198).
    • Makecmds.pm (c_expr): Treat no args as false, not as '2'. (c_preprocess): Actually chdir to the file, in case some embedded perl accesses some file.
    • Utils.pm (Rewrite::cwd): Protect meta chars in regexp.
    • t/conditionals.test: Integrate former 2003_10_11_ifeq.test.
  • 2007-02-23 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: New variable $ENV{MAKEPP_TEST_TIMEOUT}, which defaults to 600 seconds.
    • Makefile.pm (expand_text): Force $( ) to always have list semantics to make x$( $(EMPTY))y disappear.
    • t/variable_expansion.test: Test $( $(EMPTY)).
    • Makecmds.pm (frame): New standard option -A, --args-file. (c_ln): Fix --force to delete stale symlinks. (c_grep): New option -w, --waste-file.
    • t/additional_tests/2006_02_18_makeppbuiltin.test,
    • t/builtins.test: Test new options.
  • 2007-02-20 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner/C.pm (xscan_file): Check for defined to avoid warning, because after #endif $_ becomes undef.
    • Scanner/Esqlc.pm (get_directive): Simplify and fall back to father.
    • makepplog, Makesubs.pm (f_find_program): Log NOT_FOUND.
    • ActionParser.pm (parse_rule): Look for &cmd.pl dynamically, so it can be built or imported from a repository.
    • TextSubs.pm (skip_over_make_expression): Fix "unterminated reference" error in constructs like $(perl '$').
    • t/variable_expansion.test (RootMakeppfile): Test $(perl '$').
    • pod/makepp_builtins.pod (&template): Better clarify the limitations of infile assignments.
    • pod/makeppgraph.pod (uDraw(Graph)): New proposal for sideways layout without endless loop.
  • 2007-02-07 Daniel Pfeiffer <occitan@esperanto.org>
    • stress-test.pl: By default generate include statements only for directories less or equal, to avoid a mesh where everything insanely includes everything else. (CC, LD, GEN, ...): Make all commands variable, so you can use a real compiler. Adapt everything to make it compilable to runnable proggies. (SMARTSCAN): New variable to switch scanner mode. (.genh): New suffix to generate headers only.
  • 2007-02-06 Daniel Pfeiffer <occitan@esperanto.org>
    • makepplog: Shuffle options and make key selection easier. (main loop): Don't chop, only to later add end marker for split.
    • t/log_graph.test: New test of log analysis.
    • pod/makepp_variables.pod (MAKECMDGOALS): Document it. (expand_variable): Explain the different ways necessary to call this method.
  • 2007-01-22 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Don't set obsolete $MakeEvent::exit_on_error. (build_dependencies_done): Protect SYMLINK special handling here.
    • Rule.pm (add_any_dependency_if_exists_): Don't set obsolete $MakeEvent::exit_on_error. (execute): Move the actual SYMLINK special handling here. (DefaultRule::execute): Comment out a conditional that does the same as next line.
    • FileInfo_makepp.pm (load_build_info_file): Reactivate SYMLINK special handling.
    • t/additional_tests/2006_12_07_scan_order.test: Add a 2nd round so we can check that symlinks get handled right.
    • Makefile.pm (parse_rule): Try to handle upper case targets on case-ignorant file systems.
    • t/make_makefile.test (Makefile): Simplify, but still (now mysteriously) fails upper-lower case on CIFS and VFAT.
    • MakeEvent.pm: Make vars 'our'. ($n_external_processes): Comment out a var unused for 2 years. (status): Unify accessors.
  • 2007-01-17 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner/C.pm (dont_scan, xscan_file): Extend usefulness of guard detection by checking if there is anything else scanworthy in a source. If not this is remembered in the build info.
    • Scanner/Esqlc.pm (other_directive): Report if there is anything scanworthy.
    • Makecmds.pm (c_preprocess): Refix cwd.
    • makepplog (--uniq): New option.
    • Utils.pm: Give every utility an option variable analogous to $MAKEPPFLAGS.
    • t/run_tests.pl: Don't let new *FLAGS variables influence the tests.
    • makepp (MAKEPPFLAGS): Simplify handling.
    • Makefile.pm (unshift_makefile_lines): Simplify.
    • Makesubs.pm (s_register_input_suffix): Simplify.
  • 2007-01-15 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (build_dependencies_done): Eliminate redundant REP_LINK message.
    • Scanner/C.pm (dont_scan): Check for known include guard. Don't call hook unless it contains somethings useful. (xscan_file): Recognize include guards. Inline a one liner used only once. (expand_macros): Be a bit more robust about what we eval and at least show what we think we can't eval.
    • CommandParser/Gcc.pm (xset_preproc_vars): Don't check boolean C/C++ via string ops.
    • Makecmds.pm (c_preprocess): Don't mess up cwd.
    • t/run_tests.pl (n_files): Avoid "Can't stat answers" warning.
    • pod/makepp_build_cache.pod: Use Perl wildcards rather than $(wildcard /home*) to avoid loading a default makefile.
    • t/additional_tests/2005_01_17_runtime.test (c): Don't choke if chmod fails.
  • 2007-01-09 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (load_build_info_file): Provisionally short-circuit SYMLINK special handling, because it suffers from the same weakness, which Anders fixed with SEEN.
    • Scanner.pm (include): Optimize SEEN fix with int($finfo), as recently done elsewhere, and by not redundantly remembering both name and finfo.
  • 2007-01-05 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (log): Introduce versioning so we can freely update the messages and keys. (load_repository_single): Unrevert Anders' change of 2006-12-21, because it was wrong. Started discussion with him about how it could be done reliably.
    • Scanner.pm (include): Log INCL and treat it specially in makepplog or log INCL_WHO in the mysterious case.
    • Makesubs.pm (s_include):
    • Makefile.pm (load): Log LOAD_INCL to give better analysis in graph and rename it from INCL to make it selectable as a LOAD* message.
    • TextSubs.pm (getopts): Move it here.
    • Utils.pm: New module used in all utilities.
    • makepplog: Add various options and merge the myriad of include messages where possible. Actually the same ones recur time and again. Should this wasteful scanning be reduced in makepp or should makepplog just swallow the redundant information?
    • makeppgraph: Inverted all arrows to better reflect the direction in which things go. Many new options. Total rewrite to accomodate multiple kinds of edges (currently dependencies and/or includes).
    • FileInfo_makepp.pm (parse_build_info_file): Eliminate string copying. (version): New function to be used by all progs. Uninstalled, it only extracts the combined version from all makepp files when actually needed.
    • install.pl: Substitute in FileInfo_makepp and clean up a little. Install Utils.pm. ($eliminate): New dummy var for #@@eliminate.
  • 2007-01-04 Daniel Pfeiffer <occitan@esperanto.org>
    • t/spar (-e, --emacs): Fixed C-c f and improved. (-m, --createmakepptest): New option which puts controlling files first and answers last.
    • t/makepp_test_case: Call makepp clean only if there is a clean target, and always call makeppclean. Use spar -m.
  • 2006-12-21 Anders Johnson <ajohnson@nvidia.com>
    • ActionParser.pm, Makesubs.pm, ActionParser/Legacy.pm:
    • ActionParser/Specific.pm, CommandParser/Basic.pm:
    • t/additional_tests/2004_03_16_recscan.test: Change the way that makepp detects whether "meaningful scanning" happened, in order to avoid warnings every time scanner_skip_word is used via register_scanner. (But it's still ugly.)
    • Scanner.pm:
    • t/additional_tests/2004_03_16_recscan.test: Fix a bug in the initialization of the Scanner object, and add a test case to show how the API might be accessed to make this necessary.
    • makepp:
    • t/additional_tests/2003_12_05_phony_repository.test: Undo one of Daniel's changes from 2006-10-11 because it broke NVIDIA's build, and added a test case illustrating what we need to be supported. (Hopefully Daniel & I can resolve this because our requirements aren't necessarily mutually contradictory.)
    • FileInfo_makepp.pm, Glob.pm, Makefile.pm, makepp:
    • pod/makepp_rules.pod, t/last_chance.test: Major enhancement: Added support for last_chance rules.
    • makepplog: Fix a shallow bug in which logging of files in the root directory couldn't be deciphered.
  • 2006-12-14 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo.pm:
    • t/additional_tests/2003_12_05_phony_repository.test: Fix a bug having to do with phony targets triggering pattern rules if and only if the phony target appears later in the Makefile.
    • FileInfo_makepp.pm: Track change to warning generation: no objects allowed any more.
    • Makesubs.pm (s_register_command_parser): Make sure we're in the correct cwd when we load a new class.
  • 2006-12-12 Anders Johnson <ajohnson@nvidia.com>
    • Scanner.pm:
    • t/additional_tests/2006_12_07_scan_order.test: Fix 2 bugs with SEEN.
  • 2006-12-05 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (print_error): Don't use ::log on an unstructured message (which lead to orphan ^A`s in the log file).
    • makepplog: Extract the definitions before the print loop for greater flexibility of adding features (and making similar code reusable for makeppgraph).
    • makeppgraph: Teach it the new log format. Make bidirectional edges (as can result from &dir) exist just once, with both arrowheads.
  • 2006-12-03 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser.pm, Makefile.pm, Rule.pm: Use int($ref) instead of the three times slower "$ref" for hash keys.
    • makepp: Use int($ref) instead of the three times slower "$ref" for hash keys. ($logfh): Replaces LOG_FILE. (perform): Abolish --no-log-scan. (log): Create a new binary format which can be streamed in one go, rather than assembling defs and messages separately. As a bonus it's even more compact. Don't write refs for rule names, as only the string is often the same, but not the ref it is associated with.
    • makepplog: Adapt to new log format, and offer preliminary Perl code filter option, e.g. -p '!/^SCAN/'
    • Scanner.pm (scan_file1): Cache and check that we already scanned, only if not conditional. Revert one change of 2006-11-18, which was causing differences in the number of recognized includes.
    • Makesubs.pm (s_runtime): Simplify, less string copies.
    • t/run_tests.pl: Introduce hack to patch makepp to work around HP/UX 64bitall bug. (-v): Output ptrsize and archname. (n_files): Adapt to new log format.
  • 2006-11-27 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppgraph: Adapted to new log format and added colorization.
    • stress-test.pl (@suffix): Also create some .h files with no corresponding .c file. (content): Never have a file include itself.
  • 2006-11-24 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (END): Always output build count, at the very end, and also output fail count. (log): By default print to ".makepp/log". (print_log): Delete function.
    • *.pm: Replace the remaining print_log invocations.
    • makepplog: Add new messages. In keys starting with "N_" treat numbers literally, not as references.
    • Makefile.pm: Eliminate manual importing of symbols that are not used or fully qualified.
    • t/run_tests.pl (n_files): New utility function. (cp): Imported from File::Copy for test scripts.
    • t/only_targets.test: Integrate 2004_04_19_onlyphony.test.
    • t/additional_tests/2003_08_13_load_makefile_quotes.test: Integrate 2003_08_13_non_readable_makefile.test.
    • t/*.test: Add failed counter, use n_files() where needed and remove obsolete clean targets.
  • 2006-11-22 Daniel Pfeiffer <occitan@esperanto.org>
    • makepplog: New utility.
    • makepp (log): New function to replace print_log.
    • *: Use ::log and eliminate some string ops the result of which was only passed to print_log.
    • makeppbuiltin, makeppclean: Provide dummy log function to satisfy the compiler in many modules.
    • pod/makepplog.pod: New doc.
    • install.pl: Install makepplog and its doc.
  • 2006-11-18 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (CONST0 .. CONST6): Constant subs, which get aliases by many other modules.
    • Scanner/C.pm (_repl): Inline small helper that was used only once. (xscan_file): Reaorganize some tests to do cheapest decision first.
    • Scanner.pm: Rely on autovivification.
    • Rule.pm (name): New aliases for the source functions, so these can be passed to print_log.
    • *.pm: Use new TextSubs constants. Don't call finfo->name with two args, and don't call rule->source when passing to print_log.
    • FileInfo_makepp.pm (name): Make it an alias for absolute_filename.
    • CommandParser/Swig.pm (xparse_command): Don't use deprecated f_shell_global_once.
    • makepp (END): Allow -d:DProf to work correctly, by not bombing out when it is active.
    • BuildCache.pm: Fix comments about remembering file name and [2,4].
    • Makefile.pm: Remove doc mention of inexistent method.
  • 2006-11-12 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppgraph (-r, --rename): New optionname for -a, --alias. The utility functions supporting this option have been enhanced.
    • pod/makepp_builtins.pod (&template): Clarify better.
  • 2006-11-09 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl (execute): Check names with "build_cache" and "md5" for skipping as well. Check for message about spar not being able to create file, which indicates invalid chars on this file system.
    • t/additional_tests/2003_11_14_timestamp_md5.test: Rename 2003_11_14_timestamp.test for automatic md5 based skipping.
    • t/repository.test: Integrate eliminated 2005_07_28_mkdir_wildcard.test
    • t/**/*build_cache*.test (is_relevant): Remove obsoleted member.
    • pod/makepp_build_check.pod: Discuss only_action after recent changes.
    • pod/makepp_compatibility.pod (File Systems): New section.
    • stress-test.pl: Move eval of @ARGV down, so it can override some variables. (content): Reorder as far as possible by decreasing probability, giving a 10% speedup. (names): New function.
  • 2006-11-07 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (build_target_done): Optimize pushy loop. Take note when a target comes out as a symlink, howl when the rule wasn't consistent about this and remember the literal link in build info.
    • FileInfo_makepp.pm (move_or_link_target): Eliminate left over $made_temporary_link. (load_build_info_file): Retain symlink build info if only linked file changed.
    • BuildCheck/exact_match.pm (build_check): Log more sensible information about the build reason. If load_build_info fetched the symlink info, the link is still the same, so pretend we are :build_check only_command.
    • ActionParser.pm (parse_rule): Pass environment and exports from the makefile to the command parser.
    • CommandParser/Gcc.pm (xparse_command): Handle CPATH the way gcc does.
    • Makecmds.pm (c_template): Allow one level of macro nesting and macros in Perl.
    • t/builtins.test (&template): Test one level of macro nesting and macros in Perl.
    • pod/makeppgraph.pod (uDraw(Graph)): Remove mention of their old name as requested by them. (ZGRViewer): Tell how to speed up fancy effects.
  • 2006-10-30 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppgraph: New utility.
    • pod/makeppgraph.pod: New doc.
    • install.pl: Install makeppgraph, loop over some repetetive tasks and highlight &preprocessor.
    • pod/makepp.pod, pod/makepp_release_notes.pod: Mention makeppgraph.
    • Makesubs.pm (f_if): Merge this into _f_if_core to eliminate an unneeded helper. (f_mktemp): Use unlikely argument of '/' to mean repetion of previous returned value on a per Makefile basis.
    • t/variable_expansion.test (RootMakeppfile): Test $(mktemp /).
    • pod/makepp_functions.pod: Document $(mktemp /).
    • stress-test.pl: Loop over proggies instead of having the same rule thrice.
  • 2006-10-25 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (execute): Move failed-to-build message to build_dependencies_done, and remove ERROR handler that only served to output it. Flush captured output, such that when it is very long, our stderr won't get mixed into it.
    • makepp (build_dependencies_done): Format failed-to-build message better and use print_error to also handle the ouptut, formerly in execute. (print_error): Call flush_log.
    • stress-test.pl: Build three proggies instead of one, from overlapping sets of .o files. Add Shell variables which allow the compilers to be verbose and/or slow and/or to fail or choke.
    • pod/makepp_repositories.pod (Links in the way): Discuss some strategies how to handle persistent links.
  • 2006-10-23 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp, Dump.pm, profiler.pm: Remove @end_blocks.
    • FileInfo_makepp.pm (load_build_info_file): Retain previous repository information if no new info given.
    • makeppclean: Make it more similar to makepp. Major rewrite so that it also removes built directories, .makepp whenever it becomes empty and symlinks even if the linked file was found to be deletable first. (usage): Document recently modified options.
    • t/additional_tests/2004_04_01_stale_repository.test: Take into account that repository links can survive till next run.
    • pod/makepp_repositories.pod: Add missing spaces on empty lines in code examples to prevent them falling apart into two <pre> blocks. (Not respecifying your repository): New section replacing "Finding RootMakeppfile in a repository". (Know all dependencies): Mention not to use a buildcache if you want to uncover missing dependencies.
  • 2006-10-16 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (load_build_info_file): Undo short circuit, since it sometimes prevented correctly handling a changed linked file.
    • pod/makepp_extending.pod (General notes): Document the sorrows of end handling, which recently got closer, but will never be like in normal Perl.
    • pod/makepp_scanning.pod (Ad Hoc Scanner): New section.
  • 2006-10-11 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (perform): Eliminate close`s, which are now handled by previous change. (load_repository_single): Don't fetch symlinks (and comment reason).
    • BuildCheck/exact_match.pm (build_check, build_check_from_build_info) (build_cache_key): Handle new argument $only_action.
    • BuildCheck/only_action.pm: New module.
    • BuildCheck/symlink.pm: Marked as deprecated.
    • FileInfo_makepp.pm (build_info_string, set_build_info_string): Simplify build info expression. (clean_fileinfos): Fully comment it out since we're not calling it anyway. (load_build_info_file): Short circuit for symlinks, since signatures don't work for them.
    • Scanner.pm (scan_file1): Prevent occasional "readline() on closed filehandle".
    • install.pl: Remove unused $key and install BuildCheck/only_action.pm
    • pod/makepp_build_check.pod: Document only_action instead of symlink.
    • stress-test.pl (RootMakeppfile): Use END and only_action.
  • 2006-10-09 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Move signal handling to the front of the file and have an END block that interacts with it. Having this END block call POSIX::_exit removes the need to do that all over the place (except in child processes), and will lead to removal of the @end_blocks variable. (suicide): Call BSD::Resource::setrlimit, if available, to prevent overwriting a child's core. (is_windows): Move this function here, as it is now needed before loading any modules.
    • *: Fix for moved is_windows.
  • 2006-10-02 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (find_root_makefile_upwards): Also allow RootMakeppfile to come from repository.
    • makepp (perform): Don't call cleanup_temporary_links, as we want the links to survive.
    • FileInfo_makepp.pm (cleanup_temporary_links): Deleted function.
    • FileInfo.pm: Comment removal for cleanup_temporary_links.
    • t/additional_tests/2005_03_31_scanfail.test,
    • t/additional_tests/2004_04_01_stale_repository.test,
    • t/additional_tests/2004_02_19_repository_change.test (makepp_test_script.pl): Convert from sh for better portability and remove --keep-repository-links option.
    • pod/makepp_repositories.pod, pod/makepp_command.pod: Reflect the removal of --keep-repository-links.
  • 2006-09-20 Anders Johnson <ajohnson@nvidia.com>
    • BuildCacheControl.pm:
    • t/additional_tests/2006_09_20_build_cache_none.test:
    • t/additional_tests/double_colon.test: Fix build_cache_control clean --size. Add build_cache_control clean --verbose. Move 'build_cache none' check to the *_build_cache_none test.
    • Rule.pm:
    • t/additional_tests/2006_09_14_preexec_rule.test: Add a hook for doing something before each rule executes.
  • 2006-09-11 Daniel Pfeiffer <occitan@esperanto.org>
    • ActionParser.pm (parse_rule): Use B to figure out where a command was really defined, since with the change of 2006-05-14 perl really knows.
    • makeppclean: Handle opts with our getopts. Move -b to -l matching its long form. Add -b/--only-build-cache-links and -R/--only-repository-links and --version options.
    • makepp: Add -b as a short form for --build-cache.
    • Makesubs.pm (s_global): Don't delete an attribute if it doesn't exist (if this comes before 1st normal asignment).
  • 2006-09-05 Anders Johnson <ajohnson@nvidia.com>
    • Makesubs.pm, t/additional_tests/double_colon.test: Fix "build_cache none" and add test. (Where is a better place for this test?)
    • TextSubs.pm (join_with_protection): Don't modify subroutine args.
    • BuildCache.pm: Create the target directory first if necessary.
    • t/additional_tests/2004_03_24_scanner_c_lib.test: Fix for Cygwin.
  • 2006-08-24 Anders Johnson <ajohnson@nvidia.com>
    • makepp, BuildCache.pm: A few minor build cache bug fixes, mostly for diagnostics.
  • 2006-08-03 Daniel Pfeiffer <occitan@esperanto.org>
    • Incomptible change: If you had an action &xyz.pl, and xyz.pl was not executable it would be run in the current dir. Now it doesn't have to be executable, but it must be found in the PATH if it doesn't contain a '/'. That may exclude the current dir.
    • TextSubs.pm (split_path): Return '.' for empty elements, like Unix treats them, instead of dropping them.
    • Makesubs.pm (f_find_program): Make this behave like command lookup in the shell, from the cwd if it contains a '/', else from the path. Due to issues with checking the x-bit on not yet built files, use exists_or_can_be_built instead.
    • Makecmds.pm (run_forked): Add missing -S option.
    • t/run_tests.pl (-d, dot): New option and function for giving a concise overview of the tests.
    • t/additional_tests/2004_12_06_scancache.test:
    • t/additional_tests/2004_12_14_clean.test: Convert to Perl test, making it find wait_timestamp also when running with an installed makepp.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: Use own path tho find builtin.test, rather than makepp's which doesn't work when running with an installed makepp.
  • 2006-08-01 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (f_find_program): Optimize by doing as few FileInfo ops as needed. (f_wordlist): Introduce new alternative two-arg syntax, where 1st arg is a list of numbers. (f_target, f_targets, f_dependency, f_dependencies): Take an index or index lists as args. (f_{VAR}): Mark the constant ones as constant, just in case, and reduce the expand_text calls to the lower level functions as appropriate.
    • Makefile.pm (expand_text): Don't use regexp before we have copied our arguments since, as I painfully found out, that nukes $2 on the stack. (expand_variable): Call the unfriendlies without arguments, since some now check their args.
    • t/builtins.test (install_log): Force expand text, which didn't initially work.
    • t/variables_automatic.test (b): Test input et al. with index too.
    • pod/makepp_functions.pod: Describe wordlist.
    • pod/makepp_variables.pod: Explain about args to input/output.
    • t/run_tests.pl: Remove cwd from PATH to make sure no test relies on this. By giving the path to makepp as an optional 1st arg (after -v), you can test an installed version. Two of the additionals are still failing that way.
    • t/additional_tests/2005_08_31_build_cache_pop_options.test (my_true): Set path on program, not on dependency, since we run a generated program.
    • install.pl: Install the many forgotten modules. This explains a lot of headscratching why things like shared_library or Swig don't work in production, even though the code looks fine.
    • t/README: Mention to also test installed version.
    • t/signature.test: Use the more correct build_check (making this test misnamed) because signature fails in the installed version. This failure should be explored, if we want to maintain the backwards compatibility.
  • 2006-07-28 Anders Johnson <ajohnson@nvidia.com>
    • makepp, t/stress_tests/build_cache_concurrent.test: Added $::build_cache_error_hook, and test covers it.
    • BuildCache.pm: Clarify a comment.
    • BuildCacheControl.pm: Ignore incoming files that disappear asynchronously.
  • 2006-07-27 Anders Johnson <ajohnson@nvidia.com>
    • t/run_tests.pl: Propagate redirection failures.
    • BuildCache.pm: Fix handling of more rare cases that come up with build caches over NFS (revealed by the stress test). In particular, assume that anything other than 'unlink' that can fail with ENOENT can also fail with ESTALE, because apparently this can happen when the file disappears even when the parent directory is still there.
    • BuildCacheControl.pm: Produce a better warning for files that disappear asynchronously.
  • 2006-07-26 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm,
    • t/additional_tests/2005_08_31_build_cache_pop_options.test: Fix handling of a few more rare cases that come up with build caches over NFS (revealed by the stress test). Also, preserve file permissions on the way out of the cache, and add coverage for that in the test suite.
    • t/stress_tests/build_cache_concurrent.test: Don't trust the build cache to import long_file.wc, because that can mask bugs, and therefore we can't do quite so many iterations per minute.
  • 2006-07-25 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_preprocess): New command.
    • Makefile.pm (parse_assignment, read_makefile): Put in some hooks which perform the actual &preprocess-ing.
    • Makesubs.pm (import): Allow doing this selectively, because in &preprocess the makefile related statements are useless or harmful.
    • makeppbuiltin (doit): Require Makefile for &preprocess too.
    • t/builtins.test: Test &preprocess.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: Reorganized slightly, because with the oncome of &preprocess, a strange dump when exiting in eval occurred in 5.8.1 - 5.8.3.
    • pod/makepp_release_notes.pod, pod/makepp_builtins.pod: Document &preprocess.
    • pod/makepp_incompatibilities.pod: Explain better about variables with space in name.
    • pod/makepp_variables.pod: Point out global variables.
  • 2006-07-25 Anders Johnson <ajohnson@nvidia.com>
    • makepp, BuildCache.pm,
    • t/stress_tests/build_cache_concurrent.test: Add a stress test for concurrent build cache access, and fix 3 shallow bugs that were thereby revealed.
  • 2006-07-21 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm: Handle the case in which the mkdir fails, and note that even if it succeeds, the directory could go away before we can put anything in it (which was already handled correctly).
    • BuildCacheControl.pm, pod/makepp_build_cache.pod: Cosmetic changes.
  • 2006-07-20 Anders Johnson <ajohnson@nvidia.com>
    • Rule.pm: When a rule fails, report the target(s) that were being built (in case the output of the action obscures that).
    • FileInfo.pm, t/additional_tests/2004_03_31_stale.test: Fix case in which a filename of "0" was treated as undefined. Added coverage for this in the tests.
  • 2006-07-14 Anders Johnson <ajohnson@nvidia.com>
    • Makecmds.pm, pod/makepp_builtins.pod: mkdir -p succeeds even if another process created the directory after we tried to stat it.
    • BuildCache.pm: Noted another possible race that needs to fixed at some point.
    • CommandParser.pm, Makesubs.pm, CommandParser/Gcc.pm,
    • CommandParser/Vcs.pm, pod/makepp_statements.pod,
    • t/additional_tests/2004_03_24_scanner_c_lib.test: Add register_input_suffix statement.
    • t/additional_tests/2004_03_31_stale.test: Fix for Cygwin.
    • t/additional_tests/2005_08_31_build_cache_pop_options.test: Simplify.
    • t/perl.test: Test function name mangling cases.
  • 2006-07-13 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Don't clobber $0 in an uninstalled makepp.
  • 2006-07-12 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp_builtin_rules.mk: Allow makepp_no_builtin_linker=0, to turn it off for Unix as well, like the other new makepp_* vars.
  • 2006-07-11 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl (makepp): Make it easy to call other progs starting with the string 'makepp'.
    • t/README: Talk about makepp \'builtin', '-MBuildCacheControl'.
    • t/additional_tests/2005_08_12_build_cache_exmatch.test,
    • t/additional_tests/2005_08_16_build_cache_clean.test,
    • t/additional_tests/2005_08_29_build_cache_md5copy.test,
    • t/additional_tests/2005_08_31_build_cache_pop_options.test: Don't use the unreliable (hard coded to /usr/bin/perl when not installed) makepp_build_cache_control.
    • makepp, install.pl, VERSION: Calculate a more meaningful version for uninstalled and beta versions.
  • 2006-07-10 Anders Johnson <ajohnson@nvidia.com>
    • t/additional_tests/2005_08_16_build_cache_clean.test,
    • t/additional_tests/2005_08_12_build_cache_exmatch.test,
    • t/additional_tests/2005_08_29_build_cache_md5copy.test,
    • t/additional_tests/2005_08_31_build_cache_pop_options.test: Cleanup tests for speed and portability. Add is_relevant.pl; use builtins; convert scripts to Perl; remove unnecessary complexity from source files; propagate errors.
    • pod/makepp_builtins.pod: Fix spelling.
  • 2006-07-10 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm: Evaluate new makepp_* variables like make variables. (expand_text): Protect $(map) from evaluation.
    • Makesubs.pm (f_map, f_makemap, f_mktemp): New functions.
    • makepp (setup_recursive_make_socket): Use mktemp to get a file which goes away on its own at the end. (perform): Eliminate --no-rc-substitution and --percent-subdirs, renaming the associated variables to makepp_simple_concatenation and makepp_percent_subdirs.
    • makepp_builtin_rules.mk: Allow makepp_no_builtin_linker=0 to turn it off, like the other new makepp_* vars.
    • Rule.pm (execute): Add comment on future temp file handling.
    • FileInfo.pm (lstat_array): Use _ also for dir detection.
    • install.pl (highlight_variables): Highlight new functions and double parens.
    • pod/makepp_functions.pod: Document new functions and group into 3 chapters.
    • pod/makepp_extending.pod: Point to the chapter on the problems with using makefile variables in Perl.
  • 2006-07-07 Anders Johnson <ajohnson@nvidia.com>
    • ActionParser.pm: Don't infer redirected files as targets or dependencies if they contain metacharacters.
    • FileInfo_makepp.pm, t/additional_tests/2004_03_31_stale.test: Handle nested parentheses in an ifeq() directive. Swap rules for stripping whitespace from ifeq arguments between parenthesized and unparenthesized forms, to match GNU make. (This could break things that relied on the incorrect behavior.)
    • Makefile.pm, t/additional_tests/2003_10_11_ifeq.test: Make sure that a side effect file that gets created as a result of loading a Makeppfile doesn't look like a stale generated file.
  • 2006-07-02 Daniel Pfeiffer <occitan@esperanto.org>
    • Variable warning: This is the second of two steps of variable handling cleanup, which might cause minor incompatibilities.
    • Makefile.pm (expand_variable): Handle ;= and &=. Do %ENV before or after f_subs, depending on $::environment_override. (load): Don't turn command line variables into Perl vars, as that breaks the new lookup logic. See makepp_variables.pod for details. (assign): New function, extracted from parse_assignment. Implement ;= and &=. (parse_assignment): Use assign to handle target specific vars consistently.
    • Makesubs.pm (f_shell_global_once, f_shell_once): Deprecated. (s_define): Use assign to be consistent. This gives the new "define var assignment-op" syntax for free.
    • t/variable_expansion.test: Test the new features.
    • t/additional_tests/2004_03_31_stale.test: Use expand_variable to take into account that CLI vars are no longer copied to perl vars.
    • install.pl (highlight_keywords): Highlight the new kinds of assignment.
    • pod/makepp_variables.pod: Document the new features. Add a new section explaining why directly accessing vars from Perl is not such a hot idea, and what is the clean way to do it.
    • pod/makepp_release_notes.pod: Document the new features.
    • pod/makepp_functions.pod: Eliminate doc for deprecated shell*once functions.
    • pod/makepp_incompatibilities.pod: Remove mention of solved incompatibilities.
    • pod/makepp.pod, pod/makepp_build_cache.pod:
    • pod/makepp_cookbook.pod, pod/makepp_tutorial.pod:
    • pod/makepp_tutorial_compilation.pod: Small fixes and updates.
  • 2006-06-30 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm, pod/makepp_build_cache.pod: Describe plan for UTIME_ON_IMPORT in a comment.
    • Makefile.pm: If the mangled function isn't found, then try to use the unmanged function name. (Allows copy-and-paste of function name, and it was unintentially working a few weeks ago in some cases.)
    • Makesubs.pm: Don't publish nonexistent leaf directories. (Fixes wildcard_repository in my Cygwin environment.)
    • Rule.pm: Improve(?) signal handling on Windows. Fixes additional_tests/2004_12_14_clean on Cygwin.
    • makepp: Make $::critical_sections work in BuildCache.pm. Resurrect --log (alias for --logfile).
    • t/additional_tests/2004_12_14_clean.test: Improve checking.
    • BuildCacheControl.pm: Don't rely on File::Find's preprocess feature, which isn't available in Perl 5.6.0.
  • 2006-06-28 Daniel Pfeiffer <occitan@esperanto.org>
    • Variable warning: This is the first of two steps of variable handling cleanup. Bringing this in line with Gnu make removes some of the quirky handling we had, i.e. this (and my coming change) is not quite backwards compatible.
    • t/README: New file which is required lecture for test builders! Anybody ignoring the advice therein, owes the poor sod who debugs reinvented ancient problems a beer ;-)
    • Makefile.pm (expand_expression): Move undef warning from expand_text to here, which saves a backup copy needed just in case we ever print that message. ($private, $global): New variables replacing TARGET_SPECIFIC_VARS and TARGET_SPECIFIC_REEXPAND. (_truthval): Use expand_variable to also handle forgotten things like "ifdef CC" or "ifdef some_global_var". (parse_assignment): Add "override" modifier. Complete rewrite to be consistent with Gnu make and between assignment forms. This is work in progress, not yet handling target specific vars and the "define" statement the new way. (expand_variable): New function extracted from expand_expression to save checking for $(f x), $( x y z) or $(v:a=b) when we know we have a plain variable. Add extended mode to support += and ?= consistently. Work from bottom up (target specific, makefile, global, CLI, ENV, f_function) on the grounds that assignment only happens when it is allowed to, and because this is needed for "override". The f_functions are the odd one out, which don't obey global, export and override :-(
    • Makesubs.pm (f_foreach): Use $Makefile::private. (s_global): Use $Makefile::global->{VAR_REEXPAND}.
    • Rule.pm (find_all_targets_dependencies): Use $Makefile::private.
    • BuildCheck/symlink.pm (build_check): Die if we don't have exactly one depency, because then we don't know what the link should point to.
    • BuildCheck.pm (build_check, build_check_from_build_info) (update_dep_sigs):
    • Scanner.pm (xscan_file): Eliminate unneeded fallback functions, for the lack of which Perl itself has a clear error message. This saves a few kilobytes.
    • t/additional_tests/2004_04_01_append_to_undef.test: Removed and integrated into variable_expansion.test.
  • 2006-06-27 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm: Get the mtime of the file copied into the cache by stat'ing the filename (safe because it includes the unique suffix) instead of the handle, which is subject to clock skew (at least in NVIDIA's environment).
    • makepp, pod/makepp_command.pod,
    • t/additional_tests/2005_07_12_build_cache_cp.test: Add --stop-on-race to help debug race conditions, especially when there shouldn't be any.
  • 2006-06-26 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm: Fix some shallow bugs for --md5check-bc. If there is a signature mismatch, then report the signatures.
    • makepp: Log build cache keys or lack thereof.
    • BuildCacheControl.pm: Support '+-1' as a time spec, because a test uses it to clean everything without waiting.
    • makepp_build_cache_control: Don't assume that makeppbuiltin is in the command search path.
    • FileInfo_makepp.pm: Add comment regarding tracking of signature format across modules.
    • t/additional_tests/2005_08_12_build_cache_exmatch.test, t/additional_tests/2005_08_16_build_cache_clean.test, t/additional_tests/2005_08_29_build_cache_md5copy.test, t/additional_tests/2005_08_31_build_cache_pop_options.test: More tests for build caches.
  • 2006-06-23 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm, makepp: Major rework of build cache implementation, to make concurrent access over NFS safe. Initially, just check for existence of file, and then fall back to rebuilding if a problem occurs when we attempt to import from the cache. Add --md5-check-bc, --populate-bc-only.
    • pod/makepp_command.pod: Document --force-copy-from-bc, --no-populate-bc, --md5-check-bc, --populate-bc-only.
    • Signature/md5.pm: Add comment that this is coupled to BuildCache.pm now.
    • t/build_cache.test, BuildCacheControl.pm, pod/makepp_build_cache.pod: De-featured "makepp_build_cache_control populate", because it wasn't working, it's hard to fix, and there are other ways to do it.
    • t/additional_tests/2005_07_12_build_cache_cp.test: Check that there is no garbage left over in the incoming.dir build cache directory.
    • pod/makepp_build_cache.pod, BuildCacheControl.pm: Add new clean -M option. Document concurrent access issues. Add "incoming.dir" as a special name.
    • BuildCache.pm, BuildCacheControl.pm, FileInfo_makepp.pm: Pull some constants from the definitive location. Refactor some duplicate intelligence into write_build_info_file and parse_build_info_file.
  • 2006-06-14 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (parse_command_line): New option -c|--root-directory. Initially load first potential RootMakeppfile instead of last, in cases where options specify more than one rooted tree. (usage): At least mention the undocumented options.
    • Makecmds.pm (c_template): Silently treat undefined arguments as empty.
    • t/builtins.test: Test &template more thoroughly.
    • pod/makepp_command.pod: Complete the index of options, also showing those which still lack documentation.
    • pod/makepp_compatibility.pod: Document 5.8.8 working.
    • install.pl: Find numbered perl executable if needed, similar to what makepp does. (highlight_variables): Number items, if they are repeated (e.g. different case) and let the css format them.
    • pod/makepp.css: Move bold for items here, instead of repeating it for every single item.
    • makeppbuiltin (getopts_help): Output lowercase option before same in uppercase, as in our doc.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: Adapt option order.
  • 2006-06-06 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo.pm: When testing a directory for writability, use a random string in the dummy filename to avoid races when multiple makepp processes are running concurrently.
    • Glob.pm: Make a static copy of DIRCONTENTS to avoid duplicates due to the same entries being revisited when the FileInfo object get touched inside the each loop.
    • makepp: Fix a nasty bug in which scan info was cached even if the rule isn't an exact match for the one that was actually run to generate the target.
    • CommandParser/Vcs.pm: Added the '.sv' suffix, and make the suffix list easier to hook into.
    • pod/makepp_incompatibilities.pod: Noted that rule actions in makepp are expanded earlier than they are in GNU make.
  • 2006-05-31 Daniel Pfeiffer <occitan@esperanto.org>
    • install.pl (highlight_keywords): Highlight export correctly and global.
    • pod/makepp_variables.pod, pod/makepp_statements.pod: Document export and global.
    • t/additional_tests/2006_03_21_smartscan.test: Turn into Perl script so that it can also work on native Windows.
  • 2006-05-30 Anders Johnson <ajohnson@nvidia.com>
    • t/additional_tests/2006_03_21_smartscan.test: Use a test script to look at the .makepp_log file, so that the Makeppfile doesn't have to. (It's not a good idea to read the log while it's being written.)
    • t/additional_tests/2006_03_23_c_comments.test: Add a missing define to avoid an error on non-GNU compilers. A couple of cleanups in the Makeppfile as well.
  • 2006-05-31 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (parse_assignment): Handle global assignment. (expand_expression): Also check for global value.
    • Makesubs.pm (s_global): New statement.
    • t/variable_expansion.test: Test global statement.
  • 2006-05-25 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (parse_assignment): Cut down some string copying by taking arg in $_ (where the only caller has it anyways). Don't get confused about indirect assignments with a colon as in $(var:y=z) = value. Also handle the assignment part of the export statement. These changes seem to give gmake compatible assignments. (read_makefile): Adapt to changed parameter list of parse_assignment.
    • Makesubs.pm (s_export): Only mark the variable for export, whereas the assignment part (which was inconsistentwith normal assignments) is now done the standard way while reading the makefile.
    • t/variable_expansion.test: Test the things that didn't use to work.
  • 2006-05-23 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (update_build_infos, load_build_info_file): Read and write \n as \cC and write whole file in one go for better performance. This will cause a rebuild of everything that has a multi-command action.
    • BuildCache.pm (cache_file, lookup_file): Read and write \n as \cC and write whole file in one go for better performance.
  • 2006-05-19 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (::getopts): Allow specifying a standard option value, e.g. 0.
    • makepp (parse_command_line, {toplevel}): Use getopts, order specs alphabetically, use /[-_]?/ consistently.
    • pod/makepp_release_notes.pod: Document changes.
    • CommandParser/Esqlc.pm (parse_arg): Allow proc config file to be prebuilt, e.g. grepping out comment and empty lines, which proc can't munge.
    • BuildCheck/exact_match.pm (build_cache_key): Revert to hexdigest on case insensitive systems. This is not thoroughly tested, because those filesystems usually don't support links, which our test needs.
    • t/build_cache.test (is_relevant.pl): Skip if links don't work because this test alas thoroughly depends on them.
  • 2006-05-14 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (build): Use an undef BUILD_HANDLE to remember that we already logged not building this. (print_log): Open log file only now. This has the advantage of putting it into the directory changed to, which also prevents it from getting clobbered in traditional recursive $(MAKE) -C dir. This also makes --no-log work again, which presumably got broken by the introduction of --no-scan-log. (maybe_stop): Use flush_log; (flush_log): Also flush STDOUT and STDERR, which might be going to a file. (print_msg, print_sandbox, print_warning): Remove functions. (perform): Don't have almost exactly the same code twice.
    • Makesubs.pm (eval_or_die): Use `#line $number "$name"' in eval to let perl take care of correct messages instead of the messy hack with rewrite_message. This no longer puts warnings or errors from Perl code into our format, but that is correct, since it is Perl code the user wrote, so he can expect Perl messages. (rewrite_message, _get_makefile_line): Remove functions.
    • Makefile.pm (expand_expression): Eliminate obsolete WARN handler and rewriting. (load): Add missing - to -build_check and trim log opts a little.
    • FileInfo.pm (BEGIN): Don't clobber and leave .makepp_log, which we might not otherwise be touching, depending on the options.
    • FileInfo_makepp.pm (move_or_link_target, load_build_info_file): Use warn.
    • BuildCheck/target_newer.pm (build_check): Use warn and simplify.
    • BuildCheck/exact_match.pm (build_check): Use warn and simplify.
    • Scanner/Verilog.pm (resolve_module): Use warn.
    • CommandParser/Vcs.pm (xparse_command): Use warn.
    • Rule.pm (execute_command): Save two sub`s to save some memory. (find_all_targets_dependencies): Have consistent log file indentation.
    • t/additional_tests/2004_12_20_errors.test: Adapt to fact that warn now produces real perl messages.
    • t/run_tests.pl (execute): Don't complain about the newly visible perl warnings out of makefiles.
    • pod/perl_performance.pod: Tell about the inefficiency of separate prints (or arguments to print).
    • pod/makepp_speedup.pod: Tell about --no-log and --no-scan-log and RAM disk.
  • 2006-05-05 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (::getopts): Handle an explicitly empty or 0 option value correctly. Total rewrite to be more efficient by testing leading -/-- only once and then only checking for a short or only a long opt.
    • BuildCache.pm (cache_file): Cache only regular files, since we have no signature logic for fetching symlinks (and symlinks to a file with the same name may have prevented the real file to be fetched) and no code to handle other filetypes like directories. (copy_from_cache): Handle only normal files.
    • FileInfo.pm (S_IFREG): New constant for build cache.
    • stress-test.pl (bin/cc): Don't link to a symlink (e.g. to repository), which might be from a different directory, giving a stale symlink. (RootMakeppfile): Rename and don't use unreliable `` for ps. Create include directory as a target when needed.
    • pod/makepp_repositories.pod: Talk about RootMakeppfile and --keep-repository-links.
  • 2006-04-30 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (--build-check, --signature): Use right variable for the latter, and make both work with use strict.
  • 2006-04-29 Daniel Pfeiffer <occitan@esperanto.org>
    • install.pl: Substitute htmldir in two more files.
    • makepp: By newsgroup request use strict (this uncovered a wrong $program).
    • makeppbuiltin (helpfoot): New redefinable function.
    • BuildCacheControl.pm (c_clean): New timespec 'w'. Fix size-specs (T -> G) to match find (b -> c). New option --workdays. (c_show): New command.
    • Makecmds.pm (c_template): Fix regexp for ${number}.
    • pod/makepp_build_cache.pod: Document changes.
    • pod/makepp_builtins.pod: Mention that makepp doesn't notice a dependency on Perl elements you use in commands.
    • pod/makepp_speedup.pod: Mention repositories, build cache and sandboxes.
    • pod/perl_performance.pod: Add a few hints given in the newsgroup.
  • 2006-04-23 Daniel Pfeiffer <occitan@esperanto.org>
    • Build cache warning: The directory naming scheme redundancy has been eliminated. Where it used to be 12/1234/12345... it is now 12/34/5..., likewise for the meta information files. Links to the old structure still work, but new imports are not possible. If you want to save gradually recompiling everything, you must write a little Perl rename script.
    • makepp_build_cache_control: This has been turned into a shell wrapper. The functionality has been moved to the new module BuildCacheControl.pm and the clean command greatly enhanced.
    • BuildCache.pm (new): Use Makecmds::c_mkdir because we have it anyways, and because it gets the mode right. (cache_file): Use simpler file name transformation eliminating unnecessary method lookup. Use arithmetic instead of expensive bit ops. (lookup_file): Use simpler file name transformation.
    • t/build_cache.test,
    • t/additional_tests/2005_07_12_build_cache_cp.test: Use makeppbuiltin -MBuildCacheControl instead of shell script.
    • makeppbuiltin (doit): Allow loaded module (e.g. BuildCacheControl) to redefine metahelp.
    • pod/makepp_build_cache.pod: Document new features.
    • pod/perl_performance.pod: New documentation, very pertinent also beyond makepp.
    • install.pl: Install BuildCacheControl.pm and pod/perl_performance.pod.
  • 2006-04-19 Anders Johnson <ajohnson@nvidia.com>
    • CommandParser/Gcc.pm: Use boolean $gnu instead of $compiler. Cache results of running gcc -E, and fall back to guessing the predefs if gcc -E doesn't work. Avoid ``. Don't mutilate @cpp_cmd.
    • t/additional_tests/2006_03_21_smartscan.test: Renamed from condscan (a duplicate base name). Removed trailing whitespace. Use $(PERL) instead of site-specific version of perl. Removed use of if[].
  • 2006-04-18 Daniel Pfeiffer <occitan@esperanto.org>
    • Glob.pm (find_real_subdirs): Take DIRCONTENTS as a strong hint that this is a directory.
    • makepp (build_dependencies_done): Output import message according to "$progname: ... `filename'" convention and simplify.
    • BuildCache.pm (lookup_file): Optimize (tr instead of s) and simplify.
    • BuildCheck/exact_match.pm (build_cache_key): Optimize.
    • makepp_builtin_rules.mk (makepp_no_builtin_linker): New switch to eliminate only these expensive rules. (lex): Use more correct :build_check.
    • FileInfo.pm (file_exists): Simplify. (lstat_array): If we can stat this, all parents must exist, so mark them as such.
    • BuildCheck/symlink.pm: New module.
    • pod/makepp_build_check.pod (symlink): Document.
    • stress-test.pl (Makeppfile): Use :build_check symlink.
    • Makecmds.pm (_rm): Use unlink for a symlink, even if it points to a directory.
    • **.pm: Make singletons reference something existing instead of more expensive {}.
    • Makefile.pm (*): In && or || perform cheapest tests first.
  • 2006-04-13 Anders Johnson <ajohnson@nvidia.com>
    • CommandParser/Gcc.pm: Handle explicit line numbering from gcc (v3.4) -E -dM.
    • t/additional_tests/2006_03_23_c_comments.test: Unless __GNUC__ is set, use a header file that doesn't rely on any GNU extensions or other unportable fanciness.
  • 2006-04-12 Anders Johnson <ajohnson@nvidia.com>
    • makepp: Cleaned up a log message.
  • 2006-04-10 Anders Johnson <ajohnson@nvidia.com>
    • Scanner.pm: Fixed a shallow bug that was introduced by removing the call to shift. Handle too many pop_scope's more gracefully.
    • CommandParser/Gcc.pm: If the name of the compiler begins with 'g', then assume that it's a GNU compiler, and obtain the predefined macros (for conditional scanning) using -E -dM.
    • Scanner/C.pm: Many improvements to the accuracy of conditional scanning and comment parsing. Added $dont_scan_hook.
    • t/additional_tests/2006_03_21_condscan.test, t/additional_tests/2006_03_23_c_comments.test: Tests for the above.
  • 2006-04-04 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp_builtin_rules.mk (bg, break, case, ...): Don't have individual wildcards.
    • Glob.pm (zglob_fileinfo): Eliminate the generated sub, as this only seemed to serve for precompiling the regexp. Also revert to "each", as 5.005 is history, and it seems to work from 5.6 onwards. (wildcard_action): Don't store an anonymous closure for every wildcard, only the data needed to do the work, reusing precompiled regexps. This can reduce makepp's memory footprint by 15% (including the default rule wildcard elimination) and CPU about 1%, depending on the number of active wildcards. (wild_to_regex): Simplify, cache compiled regexps, and only return a scalar. Callers can use ref to see if it's a string or regexp. (find_real_subdirs): Optimize by checking already lstatted entries first, and for the rest having 4 classes of filenames from very likely a dir to very unlikely, instead of only 2.
    • FileInfo.pm: Use undef instead of 0 for frequent hash values, as that saves some memory. (publish): Add the code contained in the old wildcard_action closures. As an optimisation I check is_stale only once, rather than again for every directory. I hope this is safe, on the assumption that a file won't be made stale by a wildcard action. (dir_contents): Remove doc of inexistent function. (find_file): Remove unused (and unoptimized) function.
    • FileInfo_makepp.pm (load_build_info_file): Eliminate parse_build_info_file and integrate it into this former one liner.
    • makepp: Use undef instead of 0 for hash values which get replicated a lot, as that saves some memory.
    • Makefile.pm (cleanup_vars): Simplify.
    • Dump.pm (sorter): Massage output such that we get a FileInfo { } pseudo-syntax instead of bless and a very far away class name. (import): After $::build_root has again disappeared (and there can now be 0..n roots) revert to dumping from cwd, but at least remember the one when we were called, not the random last one when makepp ends.
  • 2006-03-29 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (import): New function to provide only the subs officially needed. This allows getting them in an external module too. (_f_if_core): Rename from f_if_core_ to avoid export.
    • Makefile.pm (load): Use Makesubs to only get the official functions.
    • Glob.pm: Small optimizations.
    • pod/makepp_extending.pod, pod/makepp_speedup.pod: Document the new possibility of "use Makesubs" for external modules.
    • t/additional_tests/2004_04_28_unshift_makefile_lines.test (Makeppfile):
    • t/directories.test (Makeppfile): Don't rely on makepp's internal functions being exported to the makefile's package, as this is no longer the case.
    • t/additional_tests/2005_07_28_mkdir_wildcard.test:
    • t/verilog.test: Use builtin commands, speeding up the test by 10%.
  • 2006-03-27 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (maybe_stop): Flush all output before stopping. ($dont_build_dir_flag): Revert change of 2005-11-13. ($build_root): Eliminated in favour of a dir ROOT property. (print_log, print_log_scan): Simplify. (parse_command_line): Eliminated option --search-upwards as this is now automatic in the presence of a RootMakeppfile and more predictable this way. Default target is now searched in the same makefile an explicit target would be, rather than in first given makefile.
    • FileInfo.pm ($root): Mark as existing, else we can't stat it. (Why, shouldn't it be the other way round, i.e. exists if statable?) (relative_filename): Fix for when when $_[2] is set.
    • FileInfo_makepp.pm (dont_build): Revert change of 2005-11-13. (set_rule): Revert change of 2006-03-17.
    • Makesubs.pm: Various small simplifications. (s_load_makefile): Set loaded directory buildable when we have a build root. (f_ROOT): Follow new semantics.
    • Makefile.pm: Various small simplifications. (find_root_makefile_upwards): New function. (load): Use it. (find_makefile_in): Find RootMakeppfile(.mk) too.
    • Makecmds.pm (&install, &uninstall): Use $ENV{INSTALL_LOG} or new ROOT property.
    • makeppbuiltin (doit): Use $ENV{INSTALL_LOG} or provide new ROOT property for install & uninstall.
    • t/implicit_load.test: Test not going out of a root directory, but not performing this check when leaving a dir with a normal makefile.
    • t/load_makefile.test: Test that load_makefile makes a directory outside the root buildable.
    • t/variable_expansion.test: Use RootMakeppfile so we can test $(ROOT).
    • t/additional_tests/2003_11_25_wild.test: Revert --do-build change of 2005-11-13. Use new makefile names.
    • pod/makepp*.pod: Document RootMakeppfile and various minor improvements.
  • 2006-03-21 Anders Johnson <ajohnson@nvidia.com>
    • Makesubs.pm: Fixed an off-by-one bug in my previous change.
  • 2006-03-17 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo.pm, FileInfo_makepp.pm: Since FileInfo::relative_filename is broken when $_[2] is set, die loudly instead of failing silently. All such known calls reverted to the illogical string length metric until this can be fixed.
    • Makesubs.pm: Changed the semantics of f_wordlist to match GNU make more closely.
  • 2006-03-11 Daniel Pfeiffer <occitan@esperanto.org>
    • t/additional_tests/2006_02_18_makeppbuiltin.test (worker.pm): Take care of Ebcdic.
    • pod/makepp.css (tall): Heighten to 150%.
  • 2006-03-07 Anders Johnson <ajohnson@nvidia.com>
    • Signature/md5.pm: Don't attempt to open non-files, because that can succeed only to cause problems later.
    • Signature.pm, BuildCheck/exact_match.pm: Put the knowledge about determining which signatures are content-based in Signature.pm. (This is still questionable, but at least it's in a reasonable place now.) A couple of tweaks to the delimiting of hashed data that should reduce the risk of build_cache_key aliasing.
  • 2006-03-02 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo.pm, Glob.pm, Makefile.pm, t/additional_tests/2005_07_28_mkdir_wildcard.test: Handle globbing on '/' correctly. Mkdir invalidates the parent directory's LSTAT info, and added a test case to show why this is necessary.
    • makepp: Store cached scanner info in the build cache. Fixes for the code that handled '--do-build' implying '--dont-build .'. Fixed a warning.
    • ActionParser.pm: Deal with null commands properly.
    • Makesubs.pm: Fixed a shallow bug in f_absolute_filename_nolink. Support 'export VAR ?= value' syntax.
    • FileInfo.pm, BuildCache.pm: Fix the check for symbolic links in the build cache.
    • BuildCheck/exact_match.pm: Include the relative path of the target in the build_cache_key.
    • Makefile.pm, Makesubs.pm, t/additional_tests/2004_12_20_errors.test: If a warning occurs within user code and is not already identified as such, then report the closest enclosing user scope as well. Also, if this occurs when the MAKEPP_DIE_STACK_TRACE environment variable is set, then die with a stack trace, for debugging purposes. Fix add_prefix and add_suffix GNU make compatibility.
    • Scanner/C.pm: Handle escaped newlines. If we don't know whether an #if is true, then also evaluate the #else clause if any. (Not perfect, but usually more conservative.)
    • makepp: Print a log message when a file is copied in from a build cache, so that we can tell what happened (especially since it can make a writable file unwritable).
    • FileInfo_makepp.pm: When removing a stale generated file, remove the associated build info file as well.
    • Rule.pm: Fixed a warning.
    • pod/makepp_sandboxes.pod: Slight clarifications.
  • 2006-03-01 Anders Johnson <ajohnson@nvidia.com>
    • FileInfo.pm: Fixed a shallow bug with symlink handling.
    • Scanner.pm, Rule.pm: Re-implemented add_include_suffix in terms of add_include_suffix_list. (Can't get rid of it, because it's part of the class's legacy interface.) Added $front parameter to add_include_dir. Report the tag when an included file can't be found.
    • Scanner/Verilog.pm: Reworked implementation to handle comments more accurately.
    • t/verilog.test: Basic test for Verilog scanning.
  • 2006-02-28 Daniel Pfeiffer <occitan@esperanto.org>
    • install.pl (highlight_variables): Use class tall in pre to have only a somewhat bigger space instead of a full empty line.
    • pod/makepp.css (tall): New class.
    • Makesubs.pm (s_include, s__include): Fix error message to follow makepp style.
    • makepp ($verbose): New variable.
    • makeppbuiltin: Major modifications. New options -I & -M.
    • Makecmds.pm (c_cut, c_grep, c_sort): Make customary Unix short opts take precedence over ours. (c_uniq): Fix option specification (S -> s). (frame): Replaces _opts and _close. Update all commands to use it. Inherit verbose from makepp. (::getopts): Optional strict mode and say which command caused error. Verbose shows long option.
    • Rule.pm (execute_command): Don't set $File::maybe_open for builtin commands as they take care of this themselves. Allow command to already be present in error message.
    • t/builtins.test (uc.out): New subtest to see that frame can be used by own command and within a module.
    • t/additional_tests/2006_02_18_makeppbuiltin.test: New test.
    • pod/makepp_builtins.pod: Document changed options.
    • pod/makepp_extending.pod: Document Makecmds::frame and possiblity of extending with Perl modules.
    • pod/makepp_release_notes.pod: Document changed options in 3 builtins.
    • pod/makeppbuiltin.pod: Document changes.
  • 2006-02-17 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm ($opt{o}, _close): Implement inplace editing via Perl-like -o +<
    • t/builtins.test (sed.out): Test -o +<
    • pod/makepp_builtins.pod: Document -o +<
  • 2006-02-16 Anders Johnson <ajohnson@nvidia.com>
    • pod/makepp.pod, pod/makepp_sandboxes.pod: Added complete documentation of the sandboxing options.
  • 2006-02-08 Anders Johnson <ajohnson@nvidia.com>
    • run_tests.pl: Work-around for bug in Perl 5.8.0 (on x86 Redhat EL3.0) wherein $Config{perlpath} is corrupted if you access $Config{sig_name} first.
    • t/additional_tests/2004_12_06_scancache.test: Call wait_timestamp.pl on x.o where needed.
  • 2006-02-07 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_grep): Don't add extra args to &perl. New option -l.
    • t/builtins.test: Test &grep -l/-xl/-xxl.
    • pod/makepp_builtins.pod: Reorder options one per line, as in makepp.pod. Document &grep -l. Link to makeppbuiltin.pod.
    • makeppbuiltin: New command
    • pod/makeppbuiltin.pod: New documentation.
    • pod/makepp_release_notes.pod: Link to makeppbuiltin.pod.
    • install.pl (highlight_variables): Insert makeppbuiltin into menu. Italicise =item args only in those pods where the 1st word is a command/function.
    • pod/makepp.pod (UPGRADE WARNING): Make it less intimidating, simply recommending a clean rebuild.
    • pod/makeppclean.pod (SYNOPSIS): Use same style as makepp.pod.
  • 2006-01-23 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (parse_rule): Allow spaces before all modifiers (bug 1391160).
    • makepp (parse_command_line): Make hidden feature accessible with new options -s, --silent, --quiet. Rename old -s to -S. Add long variants --include/--include-dir. (common_opt): Delete function and put code into while loop.
    • install.pl (highlight_keywords): Allow path after build_cache.
    • pod/makepp_command.pod: Document new options.
  • 2006-01-19 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp ($build_root): New global variable replacing the global use of $target_cwd, which does not always represent the same thing. (parse_command_line): New option --search-upwards.
    • Makefile.pm (find_makefile_in): Also try Makeppfile.mk.
    • FileInfo.pm: Use $build_root.
    • Makecmds.pm (c_sort): New options --numeric-sort and --reverse. (c_uniq): Don't call $cmp before reading 2 lines.
    • TextSubs.pm (pattern_substitution): Use precalculated length.
    • Makesubs.pm (f_filesubst): Match case insensitive filenames, needed by pattern rules. (f_ROOT): Use $build_root.
    • Glob.pm (wild_to_regex): Do a regexp that's really case insensitive, when needed.
    • t/pattern_rule.test: Test mixed case rules.
    • t/builtins.test: Test &sort -r.
    • pod/makepp_builtins.pod: Document &sort -n and -r.
    • pod/makepp_command.pod: Document --search-upwards and Makeppfile.mk.
  • 2005-12-25 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (%scanners): Add lsbc++.
    • Makecmds.pm (&sort, &uninstall): New commands. (&install): New options and write all actions to log file.
    • t/builtins.test: Test new commands.
    • install.pl (highlight_keywords): Highlight new builtins.
    • pod/makepp_builtins.pod: Document new commands and options.
    • pod/makepp_release_notes.pod: Inform about builtins.
    • pod/makepp_variables.pod: Document effect of $(MAKE).
  • 2005-12-12 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner.pm (find): Remove obsolete optimization no longer effective since scanner caching.
    • Makecmds.pm (c_cut): Use eval_or_die and Perl's autosplit variable @::F.
    • pod/makepp_builtins.pod (&cut): Document Perl's autosplit variable @::F.
  • 2005-12-03 Gary Holt <holt-makepp@gholt.net>
    • CommandParser/Swig.pm (new): Fix syntax error.
  • 2005-12-01 Gary Holt <holt-makepp@gholt.net>
    • CommandParser/Gcc.pm (xparse_command): Fix bug where -include on the gcc command line gobbled too many words.
  • 2005-11-27 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_cut): Columns now only as Perl expr. Don't die if only column 0 is requested. New option --lines.
    • Rule.pm: Consider functions with trailing '_' in name as private, so don't look them up as methods.
    • Makefile.pm (_read_makefile_line_stripped_1): Append continuation lines as long as a $(( )) is not complete.
    • t/builtins.test: Test &cut --lines.
    • t/variable_expansion.test: Test multiline $(( )).
    • pod/makepp_builtins.pod: Document &cut --lines as an alternative to head or tail.
    • pod/makepp_functions.pod: Document multiline $(( )).
  • 2005-11-24 Daniel Pfeiffer <occitan@esperanto.org>
    • Signature/c_compilation_md5.pm (signature): Slightly optimize makepp's most expensive function, by eliminating return statements and modifying stack, so we can repeatedly use &call syntax.
    • Makesubs.pm (f_prebuild): New main name for f_make, to be consistent with the equivalent statement.
    • CommandParser/Gcc.pm (%opt): New variable for quick option lookup. (xparse_command): Use %opt. Cleanup some cruft from last check in.
    • CommandParser/Swig.pm (%opt): New variable for quick option lookup. (xparse_command): Use %opt. Should now handle all options it needs to.
    • makepp, **.pm: Don't redundantly anchor .* to eol with $, as that slows regexps down.
    • pod/makepp_speedup.pod: Document --gullible.
    • pod/makepp_functions.pod: Document $(prebuild).
    • profiler.pm (DESTROY): Say who called eval.
  • 2005-11-21 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser/Gcc.pm (parse_opt): New function for overriding. (xparse_command): Optimize, fix a few options treated insufficiently or wrongly and add support for gcc-4.0's funny new options replacing -I-.
    • CommandParser/Esqlc.pm: Reimplemented with Gcc inheritance, by pushing back modified words. Now almost fully handles Oracle Pro*C.
    • Scanner/Esqlc.pm (get_directive): Handle EXEC ORACLE. (other_directive): Handle optional include suffix, as provided by parser to add_include_suffix_list.
    • CommandParser/*.pm (new), Scanner/Verilog.pm (new): Don't repeat class determination and blessing.
    • t/esqlc.test: Test Oracle Pro*C harder.
  • 2005-11-15 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm ($case_sensitive_filenames): Don't delete testfile, as that caused the log to be recreated as root, when making "install". (Reported by Rob Schaper)
    • makepp, config.pl, MakeEvent.pm (process_finished): Eliminate client/server mode.
    • install.pl: Eliminate client/server mode. (highlight_variables): Don't put markup into title.
    • makeppclient, t/client_server_unix.test:
    • pod/makeppclient.pod: Eliminate files.
    • t/additional_tests/2003_11_25_wild.test (makepp_test_script.pl): Also works on older Perl.
    • makepp_builtin_rules.mk: Remove warning for ./test from linker rule, moving it into a rule of its own, which now handles all Bourne Shell builtins and keywords. Don't use Shell for Windows phony .exe hack.
    • pod/makepp_speedup.pod: Show simplified commands with aliasing.
    • pod/makepp_builtin.pod: Remove variable list, since I had overseen it when creating the new one in makepp_variables.pod. It fits better there, and the new one is complete.
  • 2005-11-14 Gary Holt <holt-makepp@gholt.net>
    • FileInfo.pm (stat_array): Fix bug where we used the wrong directory as a starting point for symbolic links with relative paths.
  • 2005-11-13 Gary Holt <holt-makepp@gholt.net>
    • CommandParser/Swig.pm (xparse_command): Fix bug where SWIG includes overwrote C++ includes if the same .h file was seen by both swig and C++.
  • 2005-11-13 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (maybe_stop): New function. ($dont_build_dir_flag): Removed var. (parse_command_line): Make $FileInfo::root DONT_BUILD because otherwise makepp goes barging into foreign directories where it's only supposed to pick up things, if they happen to have sources. So make $target_cwd DONT_BUILD=0, unless there's a directly inherited --do-build under it, which wouldn't otherwise make sence.
    • Makesubs.pm (f_infer_linker, f_infer_objects, f_make) (s_prebuild): Call ::maybe_stop.
    • t/additional_tests/2003_11_25_wild.test (makepp_test_script.pl): Replaces Shell script and explicitly allows makepp to build something outside of the build tree.
    • FileInfo_makepp.pm (dont_build): Don't consider abolished var $::dont_build_dir_flag.
    • pod/makepp_speedup.pod: New doc.
    • install.pl (highlight_variables): Make "makepp" look like in the logo, wherever it is used. Add speedup doc to nav bar.
    • Dump.pm (Dump::import): Dump $::target_cwd, when called via use.
    • stress-test.pl: The directories b, d, f and h, if present, will have a Makeppfile generated by makepp.
  • 2005-11-09 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner.pm (new): Eliminate SCANNED, as these are now directly stored in the scanner (hash key collisions being impossible.) Introduce SEEN. (scan_file1): Eliminate apparently unused "local $_". (include): Use SEEN for only handling each file once per scanner, giving a nice speedup. This is also needed so that makepp doesn't choke on include recursion, which the compiler catches via include guards. This works for us, but I might have missed something.
    • FileInfo.pm (lstat_array): Use -l for symlinks instead of erroneous -s. Remember when it's a symlink by setting LINK_DEREF to false, i.e. making it exist. (link_deref): Eliminate and include into the only two callers. (dereference, is_or_will_be_dir, is_symbolic_link, stat_array): Use LINK_DEREF to optimize these CPU hogs. Herewith FileInfo leaves the top 10.
    • FileInfo_makepp.pm (signature): Use LINK_DEREF to avoid statting when possible. Eliminate multiple return statements.
    • makepp (parse_command_line): Don't check directory existence, because makdir will do it again.
    • profiler.pm: Keep microseconds as integer and do own calculations -- Time:HiRes converts to float, which is often one off (maybe more when not on Linux).
    • stress-test.pl: Generate potentially recursive includes. Output memory as -1 if not obtained from ps. (Why did this happen on Solaris?) (NO_LN, LN, DUMP): New makepp CLI variables.
  • 2005-11-03 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner.pm (scan_file1): Replace obsolete module FileHandle with "open my $fh, ..." (find): Calculate dir only if we get an undef. Cache results per directory, but not per suffix. This would seem to increase memory consumption, but in fact reduces it slightly. But most of all it reduces CPU consumption yet again by 15% - 30% depending on how far into the include/lib paths the files have to be searched.
    • Makesubs.pm (f_CC, f_CXX, f_F77, f_LEX, f_YACC): Cache results. (f_ROOT): New variable.
    • FileInfo_makepp.pm (exists_or_can_be_built_or_remove): Eliminate 2nd caching of EXISTS_OR_CAN_BE_BUILT, now handled by Scanner.
    • Rule.pm (execute_command): Replace unneeded module FileHandle with close.
    • makepp (--version): Inform about GPL as well. (parse_command_line): Replace obsolete module FileHandle with "open my $fh, ..."
    • LICENSE: Bump GPL to version 2.
    • stress-test.pl: Show memory consumption in final output.
    • makepp_builtin_rules.mk (_CPP_SUFFIXES): Handle file-name case sensitivity separately from Windows, since Linux and others can also access such file systems.
    • t/variable_expansion.test: Test $(ROOT).
    • pod/makepp_variables.pod (Predefined Variables): New section.
  • 2005-11-01 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (parse_command_line): Make $target_cwd (the top of the build tree) generally accessible as our instead of my.
    • FileInfo.pm (relative_filename): Optimize by cutting off if $fileinfo is under $dirinfo or if both are under $::target_cwd. When new optional 3rd arg is true doesn't assemble the result as a string, but only returns the distance.
    • FileInfo_makepp.pm: Some small optimizations. (set_rule): Use new 3 arg form of relative_filename. This can change builds because it now compares the actual directory distance, instead of using path string length as an approximation. (assume_unchanged, dont_build, in_sandbox, dont_read): Eliminate return statements (which are expensive in some versions of Perl) in these extremely frequently called functions.
    • Scanner.pm (INCLUDE_DIRS, INCLUDE_SFXS, TAG_MAP, SHOULD_FIND): New constants for indexing the array looked up by {$tag}, which replaces 4 separate mini hashes we used to have. For this tags are now documented as required to be lowercase, so as to evite collision with any Scanner attributes. (new): Initialize fewer fields. (get_tagname): Address TAG_MAP the new way. (add_include_dir): Address INCLUDE_DIRS the new way. (add_include_suffix_list): Replaces add_include_suffix. Takes the whole list at once and caches it to prevent having many identical lists. Address INCLUDE_SFXS the new way. (should_find): Address SHOULD_FIND the new way. (info_string): Set a whole hashref at once, on the ground that these are effectively constant, so can be shared across scanners. (scan_file1): Get directory status from FileInfo instead of from file system and only log "Scanning" if we can read the file. (find): Add a dummy argument so this can be called as &find by include, which is the most frequent call in makepp. We sacrifice method lookup, since no subclass implements a different find.
    • Rule.pm: Use changed Scanner interface. (add_include_suffix_list): Replaces add_include_suffix.
    • CommandParser/Esqlc.pm, CommandParser/Gcc.pm:
    • CommandParser/Swig.pm, CommandParser/Vcs.pm: Use changed Scanner interface.
    • pod/makepp_compatibility.pod (AIX): Add 5.8.7.
    • stress-test.pl: New utility.
  • 2005-10-31 Gary Holt <holt-makepp@gholt.net>
    • CommandParser/Swig.pm (xparse_command): Fix bogus include file warnings.
  • 2005-10-24 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo_makepp.pm (exists_or_can_be_built_norecurse): Combine two return statements, since it turned out that multiple returns are more expensive than one with a complex condition. At least on Intel, on Sparc this does not seem an issue. Cache result in EXISTS_OR_CAN_BE_BUILT. (exists_or_can_be_built): Prevent call if EXISTS_OR_CAN_BE_BUILT is cached. (exists_or_can_be_built_or_remove): Also cache result in EXISTS_OR_CAN_BE_BUILT.
    • Scanner.pm (find): Use cached EXISTS_OR_CAN_BE_BUILT to prevent calling exists_or_can_be_built_or_remove half a million times.
    • profiler.pm: Don't flush so much intermediate info by default. Also instrument generated wildcard function in Glob.pm. New option -r. New arguments: Module...
  • 2005-10-22 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm: At the end add a list for most functions whether they are safe to call with implicit stack. (traverse): Make this function iterative instead of recursive.
    • BuildCache.pm, FileInfo_makepp.pm, Makesubs.pm, Rule.pm:
    • Scanner.pm, makepp: Use impicit stack for many FileInfo calls.
  • 2005-10-20 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp (ARCHITECTURE, PERL): New constants replacing former variables. Call a few FileInfo functions with stack reuse.
    • BuildCheck/exact_match.pm: Use the new constants. Repeatedly make use of the grouped retrieval of build info. (build_cache_key, update_dep_sigs): Change the regexp to recognize a base64 sig, instead of a hex sig.
    • Makecmds.pm, Makesubs.pm: Use the new constants.
    • FileInfo_makepp.pm: Call a few own methods as functions or with stack reuse.
    • Rule.pm (load_scaninfo_single): Retrieve one more build info in the common call. Call Scanner methods as functions since we just instantiated the object ourselves, so there can be no inheritance.
    • profiler.pm: Show the times() delta at least per interval and at the end.
  • 2005-10-19 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp ($in_sandbox_dir_flag): Rename to match predicate. (setup_recursive_make_socket): Since this is no longer autoloaded, require IO::Socket instead of using it, loading only when needed, as the comment promised.
    • FileInfo.pm (dereference): Make heavily used function iterative instead of recursive. (stat_array): Put in same guard as in dereference for endless recursion.
    • FileInfo_makepp.pm (assume_unchanged, dont_build, in_sandbox): (dont_read, _test_set): These were by far the most frequently called functions, so eliminate the helper, generating each one individually instead. (parse_build_info_file): Profit from stack reuse possible for &dont_build. (Should go over this systematically to reap the maximum benefit wherever possible!)
    • profiler.pm: Be smarter about not instrumenting trivial functions. Fix child process profiling. (@ENV{PROFMPP_MINTIME PROFMPP_MINCOUNT PROFMPP_CHILDFRACTION}): ($ENV{PROFMPP_INTERVAL}): Renamed and new options, which also get recorded in the log files.
  • 2005-10-17 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (stat_array): Keep track of the element we're iterating over to prevent endless loop. (Why didn't the test suite catch this, even though it uses symlinks?)
    • Rule.pm (execute_command): Remove unreachable elsif.
    • profiler.pm ($ENV{MININTERVAL}): New minimum distance for displaying intermediate results. On a sufficiently fast machine, this interval is fairly precise. (DESTROY): Output correlation timestamps to .makepp_log. (output_child): New function not yet working (why not?)
  • 2005-10-15 Daniel Pfeiffer <occitan@esperanto.org>
    • ActionParser.pm, ActionParser/Legacy.pm,
    • ActionParser/Specific.pm,
    • BuildCheck/architecture_independent.pm,
    • BuildCheck/ignore_action.pm, CommandParser.pm,
    • CommandParser/Basic.pm, CommandParser/Esqlc.pm,
    • CommandParser/Gcc.pm, CommandParser/Swig.pm,
    • CommandParser/Vcs.pm, MakeEvent.pm, Makefile.pm, makepp,
    • Makesubs.pm, Scanner.pm, Scanner/C.pm, Scanner/Esqlc.pm,
    • Scanner/Swig.pm, Scanner/Vera.pm, Scanner/Verilog.pm,
    • Signature/c_compilation_md5.pm, Signature/shared_object.pm,
    • Signature/verilog_simulation_md5.pm,
    • Signature/verilog_synthesis_md5.pm: Eliminate expensive call stack modifications. Replace module "vars" by keyword "our".
    • Rule.pm (execute_command): New local var $File::maybe_open incremented for each Perl block we run, so that the Perl code gets a chance to declare that it has not left any files open.
    • Makecmds.pm: Decrement $File::maybe_open to prevent calling /bin/true when sure that no files remain open.
    • FileInfo.pm (STAT_NLINK): Add constant which was forgotten, because it was only present as a numeric literal. (stat_array): Make heavily used function iterative instead of recursive.
    • FileInfo_makepp.pm (signature): Optimize heavily used function.
    • Glob.pm (find_real_subdirs): Use STAT_NLINK.
    • profiler.pm: Don't instrument very trivial functions. (@ENV{MINTIME MINCOUNT}): New minima, below which functions are not considered. Defaults to 10ms and 20 calls. (display): New function grouping ever the same operations, and optimized by eliminating values below the minima before sorting.
  • 2005-10-12 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (lstat_array): Let Perl test readability while it has the stat structure, unless it's a symlink.
    • BuildCheck/exact_match.pm (build_cache_key):
    • Signature/c_compilation_md5.pm (md5sum_c_tokens):
    • Signature/md5.pm (signature):
    • Signature/shared_object.pm (signature_shared_lib): Use slightly faster and more memory efficient base64 digest instead of hex format.
    • Dump.pm (Dump): Put directories after names and only show statistics for signature lists. Per default dump at end of makepp run.
  • 2005-10-07 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp, BuildCache.pm, FileInfo.pm, FileInfo_makepp.pm: Remember only those stat fields we use. Eliminate stack modification.
  • 2005-10-05 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm: Change documentation to underline that we very much want this to be used functionally. (@EXPORT, @EXPORT_OK): Optimize choice. (STAT_*): New constants instead of old vars which were duplicated in several modules.
    • FileInfo_makepp.pm (build_info_string): Allows fetching multiple keys at once. (exists_or_can_be_built_norecurse): Eliminate double test.
    • ActionParser.pm, BuildCache.pm, CommandParser.pm, Makefile.pm,
    • Makesubs.pm, Rule.pm, Scanner.pm, makepp, BuildCheck/exact_match.pm,
    • BuildCheck/target_newer.pm, CommandParser/Esqlc.pm,
    • CommandParser/Gcc.pm, CommandParser/Vcs.pm, Scanner/Verilog.pm,
    • Signature/c_compilation_md5.pm, Signature/md5.pm,
    • Signature/shared_object.pm: Eliminate OO use of FileInfo.
  • 2005-09-09 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (split_on_whitespace_or_commands): Revert last change, which could cause Perl 5.8.0 to segfault mysteriously on a huge project. Reimplement it differently.
    • Makecmds.pm (c_cp, c_ln): Fix -f in case target is given as a directory. Used to test existence of directory for deletion here.
    • t/builtins.test: Test &ln fix.
    • t/additional_tests/2005_07_12_build_cache_cp.test: Skip if MD5 not available.
  • 2005-08-18 gholt <holt-makepp@gholt.net>
    • CommandParser/Swig.pm, Scanner/Swig.pm, Makesubs: Add a new scanner/command parser for SWIG (a wrapper generator for various scripting languages).
    • Makesubs.pm (eval_or_die): Fix a bug where a change in error message format in perl 5.8.7 caused perl_begin to fail.
  • 2005-08-04 Gary Holt <holt-makepp@gholt.net>
    • Makesubs.pm (f_join): Fix bug (reported by Mark Pettigrew) in join function where a "0" was treated as undefined.
  • 2005-07-14 <holt-makepp@gholt.net>
    • Makesubs.pm (f_filter, f_filter_out, etc.): Give an error message if not enough arguments are supplied.
  • 2005-07-12 Anders Johnson <ajohnson@nvidia.com>
    • makepp, BuildCache.pm, BuildCheck.pm, BuildCheck/exact_match.pm, t/additional_tests/2005_07_12_build_cache_cp.test: Build cache policy change: Key equality now must imply substitutability. Use MD5 signatures for dependencies in the build cache key if the signature is otherwise not MD5-based. Don't call build_check_from_build_info after getting a key match. After importing from the build cache, update DEP_SIGS as needed to avoid a build check failure on a subsequent makepp run. Add --force-copy-from-bc option to test the different filesystem case, and added build_cache_cp.test that makes use of it.
  • 2005-07-11 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm: Because of concurrent build cache access, the mkdir can fail, but we don't care so long as it exists after we make the attempt.
    • makepp: Added --nopopulate-bc option. If makepp detects a problem when completing, print the error that caused it to bail out, if any. Improved the "dangling critical section" error message. Changed the final diagnsotic from "build failed" to "target(s) failed", because sometimes users don't think they're building anything (e.g. "makepp clean" and "makepp test"). Properly handle the case in which build_target_done bails out.
    • t/client_server_unix.test: Tracked change to final diagnostic.
  • 2005-07-01 Daniel Pfeiffer <occitan@esperanto.org>
    • pod/makepp_compatibility.pod: Document 5.8.7 and sourceforge compile farm results.
    • t/additional_tests/2004_03_24_scanner_c_lib.test (libxyz.a): Fix ar options for Darwin.
    • t/spar ($extractor): Fixed for Darwin. (Emacs spar-fix): Also update modification time stamp.
    • t/additional_tests/spar_unix.test: Test version 0.8.
  • 2005-06-30 Gary Holt <holt-makepp@gholt.net>
    • FileInfo.pm (is_writable): Because of problems with Cygwin's directory permissions not actually corresponding to what Windows thinks the directory permissions are, when checking for writability of a directory, we look more carefully at the mode. If the directory is writable by no one (user, group, other), then we don't bother to try to create the test file. This way, even if we would succede in creating the test file, we still mark the directory as unwritable--which is what we want for inhibiting repository imports and inhibiting scanning of read-only header files.
  • 2005-06-30 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp_builtin_rules.mk (_OBJ_SUFFIX): New variable used in all .o rules. (_IS_CYGWIN): Replaced by an ifperl block.
    • Makesubs.pm (system_include_dirs): Handle /usr/include not being available (Windoze), but don't know how to get this right. (scanners, f_CC, f_CFLAGS, f_CXX, f_CXXFLAGS): Handle Visual Studio and Borland.
    • t/run_tests.pl (un_spar):
    • Makecmds.pm (c_mkdir): Don't call mkdir() with trailing '/', as this fails on Darwin.
    • Rule.pm (execute_command): Exec /usr/bin/true for BSD, which doesn't have /bin/true.
    • t/c_compilation.test: Make it work on native Windows.
  • 2005-06-27 Anders Johnson <ajohnson@nvidia.com>
    • Makesubs.pm, pod/makepp_functions.pod: $(relative_filename) and $(relative_to) always return filenames containing a slash, in case they are used as executables.
  • 2005-06-20 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (eval_or_die): Revert undocumented commenting out of code line determination, as this broke 2004_12_20_errors.test.
    • t/additional_tests/2003_11_14_timestamp.test,
    • t/additional_tests/2004_02_27_srctarg.test,
    • t/additional_tests/2004_03_03_minusk.test,
    • t/additional_tests/2004_03_03_scan_build.test,
    • t/additional_tests/2004_03_31_stale.test,
    • t/additional_tests/2004_12_20_errors.test: Replace Shell code with Perl for native Windows compatibility.
    • t/additional_tests/2004_03_26_exit_status.test: New test combines two almost identical tests.
    • t/additional_tests/2004_03_26_perl_exit_status.test,
    • t/additional_tests/2003_10_17_shell_exit_status.test: Remove old tests.
  • 2005-06-15 Gary Holt <holt-makepp@gholt.net>
    • Makesubs.pm (f_findfile): Fix bug in path splitting.
    • Makefile.pm (_truthval): cd to the proper directory before evaluating any ifperl construct, so that if the perl code accesses the filesystem, it works on the right directory.
  • 2005-06-15 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (split_path): New function. (format_exec_args): Refix for MinGW.
    • Makesubs.pm (f_find_program, f_findfile, f_MAKE): Use split_path.
    • t/variable_expansion.test (shell_command): Eliminate ';' on native Windows. Add trailing space for Unix because this is apparently inevitable on Windows. (x): Extend this to cover all cases of former export.test. Alternately use Windows variable syntax.
    • t/export.test: Drop redundant test.
  • 2005-06-14 Anders Johnson <ajohnson@nvidia.com>
    • ActionParser.pm: Deal with "cd" commands in an action. A couple of bug fixes as well.
    • Makesubs.pm, makepp, pod/makepp_functions.pod: Add f_temporary.
    • TextSubs.pm: Fixed bug wherein '>&' in a shell command was erroneously treated like '> &'.
  • 2005-06-12 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (format_exec_args): Fix native Windows handling.
    • t/run_tests.pl (makepp): Return true on success (in case a test script ends with this).
    • t/dry_run_what_if.test, t/directories.test: Eliminate complex Shell commands for the benefit of native Windows.
  • 2005-06-09 Anders Johnson <ajohnson@nvidia.com>
    • ActionParser.pm, CommandParser.pm: Refactored add_dependency method and its associates from CommandParser into ActionParser, because they're needed in both places. Handle '>>' redirectors properly.
  • 2005-06-08 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (_opts): Select $outfile so perlcode can print. (c_perl): New command.
    • t/builtins.test (sed.out): Test &perl.
    • pod/makepp_builtins.pod: Document &perl.
    • install.pl: Add new fields above nav-bar. Add timestamp in foot if Id-tag is present in the pod file.
    • pod/makepp.css: Format new fields above nav-bar.
    • pod/google.png, pod/sflogo.png: New files so that local pages don't dial in to get the logos.
  • 2005-06-07 Anders Johnson <ajohnson@nvidia.com>
    • install.pl: Install makepp_build_cache_control and BuildCache.pm. Substitute the she-bang of every file, not just the first one with which substitute_file is called. Also, do the right thing if the directory path in the she-bang starts out containing "perl".
    • ActionParser.pm, TextSubs.pm: Parse multiple redirectors properly, using max_index_ignoring_quotes.
    • FileInfo.pm, FileInfo_makepp.pm: Moved implementation of $FileInfo::directory_first_reference_hook from exists_or_can_be_built to is_or_will_be_dir, and made the former call the latter.
    • FileInfo_makepp.pm, Rule.pm, Makefile.pm, makepp, t/directories.test: Handle the case in which a stale generated file can still be built because it now comes from a repository. This is complicated, because properly handling the cases in which it is built after its rule is deleted becomes tricky.
    • Scanner.pm: Fixed a typo from one of Daniel's uberchanges.
    • Makesubs.pm: Add f_absolute_filename_nolink.
    • makepp_build_cache_control: Fixed a couple of spurious warnings.
    • t/build_cache.test: Fixed the test case for the 2005-06-02 change.
    • t/additional_tests/2004_11_02_repository_rmstale.test: Added test case for getting a formerly generated file out of a repository.
  • 2005-06-06 Anders Johnson <ajohnson@nvidia.com>
    • Makesubs.pm, t/additional_tests/2004_03_24_scanner_c_lib.test: Don't use 'our', because it overrides the package inside an eval call from within its scope (e.g. from eval_or_die).
  • 2005-06-02 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (absolute_filename_nolink): Don't assume slash before C:/ (this is what was completely breaking makepp on native Windows).
    • makepp ($PERL): New variable, more reliable than $Config{perlpath} in case of multiple installed versions. (@signals_to_handle): Emtpy list on native Windows 5.6.1 which doesn't define sigs.
    • Makecmds.pm (run_forked): Don't fork on native Windows, but run system $::PERL. (c_cat): Use copy, because syscopy can't write to file handle on native Windows.
    • Makesubs.pm (f_MAKE): Use $main::PERL.
    • Makefile.pm (_truthval): Don't expect uname to work.
    • t/run_tests.pl (execute): Handle un_spar failing for symlinks on natve Windows. ($ENV{PERL}, $perl): Set these reliably in case of multiple installed versions.
    • t/builtins.test (echo.out): Don't expect native Windows "shell" to handle complex command.
    • pod/makepp_compatibility.pod: Added 6 Linux and 3 Solaris tests. Document that native Windows is half working.
  • 2005-06-02 Anders Johnson <ajohnson@nvidia.com>
    • BuildCache.pm, t/build_cache.test: Fixed a bug in which stale file attributes were not discarded after importing a file from a build cache.
    • Makefile.pm, t/conditionals.test: Fixed a bug in which a conditional after an inactive conditional was ignored.
  • 2005-05-31 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: Use File::Path::rmtree since its more efficient than forking 3 processes and since 2>&- doesn't work on native Windows.
    • Makesubs.pm (%scanners): Add colorgcc. (f_warning): Use warn for consistency.
    • additional_tests/2004_12_20_errors.test: Test $(warning).
    • pod/makepp_compatibility.pod: Improve formatting and add one test case.
  • 2005-05-27 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (file_info): Don't put empty field in server-share paths. Handle C:\ (but Windows doesn't work yet).
    • Makecmds.pm (c_ln): Make MAKEPP_LN_CP a bit vector to individually control &ln and &ln -s.
    • Makesubs.pm (f_error, f_warning): New functions.
    • t/run_tests.pl (execute): Don't report failure chmod`ing to-be-deleted dir.
    • t/builtins.test: Don't fail if Perl can't chmod on Cygwin (probably a //server/share).
    • install.pl: Handle makepp_compatibility so that it can be easily edited and shown in all output formats. (highlight_variables): Handle $(error) and $(warning).
    • pod/makepp_compatibility.pod: Recreate the table from scratch, reflecting my current test results. Those that I can't verify, which date from 1.40, have been dropped and need to be reconfirmed.
    • pod/makepp.pod, pod/makepp_builtins.pod:
    • pod/makepp_incompatibilities.pod:
    • pod/makepp_release_notes.pod: Update.
  • 2005-05-25 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (format_exec_args): On MinGW must start $(CC) via /bin/sh, or it doesn't get its arguments.
    • Makesubs.pm (@system_include_dirs): Don't add /usr/local/include if it doesn't exist (caused a warning on MinGW).
    • Makecmds.pm (c_ln): Add $ENV{MAKEPP_LN_CP} for making this sort of portable to systems where (sym)link doesn't work.
    • t/run_tests.pl (no_symlink): New constant. Use it to eliminate repository based tests on Samba mounts, Windows shares and MinGW.
    • t/builtins.test: Don't die on systems where chmod or link don't work.
    • t/wildcard_repository.test:
    • t/additional_tests/2003_11_14_repository_unlink.test, 2003_11_25_repository_tot.test, 2003_12_05_phony_repository.test, 2004_01_21_repository_build.test, 2004_02_19_repository_change.test, 2004_03_25_repository_rule.test, 2004_04_01_stale_repository.test, 2004_11_02_repository_rmstale.test: Rename these with "repository" so they can be excluded where not applicable.
    • pod/makepp_builtins.pod (&ln): Document $MAKEPP_LN_CP.
    • FileInfo.pm (absolute_filename_nolink): Return '/' if passed an empty (or undefined?) FileInfo. (Workaround suggested by Bruce Edge)
    • Rule.pm (@ISA): Add "our" needed in subpackage.
  • 2005-05-24 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm (is_windows): New exported constant. Also covers MinGW (MSYS) and for the future ActiveState (MSWin32).
    • Glob.pm (zglob_fileinfo): Use is_windows.
    • makepp: Abolish $can_fork. (common_opt): Use is_windows.
    • MakeEvent.pm (start): Use is_windows.
    • Makesubs.pm: Use is_windows.
    • Rule.pm: Use is_windows. (DefaultRule::BuildCheck): Import absolute_filename.
    • makepp_builtin_rules.mk: Use FileInfo::is_windows.
    • t/run_tests.pl (is_windows): New constant.
    • t/additional_tests/2004_03_24_scanner_c_lib.test (EXE_SUFFIX): Use FileInfo::is_windows.
    • t/client_server_unix.test:
    • t/parallel_unix.test:
    • t/additional_tests/spar_unix.test: Added _unix to file name so as to skip on all Windows environments.
  • 2005-05-22 Daniel Pfeiffer <occitan@esperanto.org>
    • install.pl: Don't install new makepp_compatibility.pod as Man page. Unify titles with nav-bar and overview. Don't write final success message into last html file. (highlight_keywords, highlight_variables): Underline targets as Emacs does and highlight &builtins.
    • pod/makepp.pod: Unify titles with nav-bar and overview.
    • pod/makepp_compatibility.pod: Convert from HTML, so as to get consistent look and feel with other pods.
    • pod/*pod: Whitespace cleanup and join adjacent <pre>s. Beautify initial index where available. Fix typos and the build_cache warning. (Miscommented in CVS due to commit handling error.)
  • 2005-05-18 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (_read_makefile_line_stripped_1) (skip_makefile_until_else_or_endif): On initial success with else ifxxx, don't also do else.
    • t/conditionals.test: Test the above.
  • 2005-05-13 Daniel Pfeiffer <occitan@esperanto.org>
    • install.pl: Add nav-bar to all pages.
    • pod/makepp_release_notes.pod: Update.
    • pod/makepp_compatibility.html: Add nav-bar.
    • pod/makepp.css: Format nav-bar.
  • 2005-05-10 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm: Remove all auto-qualifications by giving all those variables a my or our spec. (_truthval): New function extracted from _read_makefile_line_stripped_1. Implemented ifsys. (_read_makefile_line_stripped_1): Implemented and/or/else ifxxx combinations.
    • t/conditionals.test: Test ifsys (with a match all wildcard), and the and/or/else ifxxx combinations.
    • pod/makepp_statements.pod: Document new conditionals and reorganize pod into three sections.
    • install.pl (highlight_keywords): Handle ifsys and the and/or/else ifxxx combinations.
  • 2005-05-07 Daniel Pfeiffer <occitan@esperanto.org>
    • makeppclient (--start-server): Exit if FIFO can't be created.
    • t/builtins.test:
    • t/client_server.test:
    • t/additional_tests/spar.test: These fail for various reason on a Samba drive, so make them irrelevant there.
    • t/variable_expansion.test: Integrate 2004_04_27_target_specific_append.test and drop that.
    • t/conditionals.test: Integrate 2004_05_13_ifdef.test and 2004_12_16_endif.test and drop them.
    • t/pattern_rule.test: Integrate 2004_12_29_static_pattern_rule.test and drop that.
  • 2005-05-05 Daniel Pfeiffer <occitan@esperanto.org>
    • Glob.pm: Call FileInfo as functions, don't modify call stack and other minor optimizations.
    • profiler.pm: Actually get output called when shutting down makepp. (DESTROY): Don't trigger this in a rule action, only in the main process. Count the time needed for this (considerable when outputting after 10s) neither for the profilee, nor for its caller. Record a second set of stats for each function separately per caller, in the hope that such pairs give better combined optimization ideas, or hints at where makepp's algorithm is wasteful.
  • 2005-05-03 Daniel Pfeiffer <occitan@esperanto.org>
    • profiler.pm: New analysis script/module.
    • Makefile.pm: Completely take out internal object orientation, replacing costly $mfile->method, with method( $mfile ), or where possible even &method, reusing stack. Optimizations like no modifications of stack, no unneeded my variables, tr instead of s, no double quotes unless interpolation is wanted.
    • TextSubs.pm (skip_over_make_expression): Return length of parens, so caller needn't rescan.
  • 2005-04-28 Anders Johnson <ajohnson@nvidia.com>
    • ActionParser.pm: Parse redirectors (but still need to add targets and dependencies for them).
    • ActionParser.pm, t/additional_tests/2004_12_20_errors.test: Commented out one of Daniel's changes from 2005-04-16, and cover the problem in the test suite. (Need to discus how to fix this for real.)
    • Makesubs.pm, t/additional_tests/2004_12_20_errors.test: Deal with diagnostics from perl actions in a rule defined in an included makefile, and cover in the test suite. Call touched_filesystem *after* evaluating generic code.
    • Rule.pm, t/additional_tests/2004_12_06_scancache.test: Re-added a line that was inadvertently (I assume) deleted by Daniel on 2005-04-21, and cover the issue in the test suite. Also backed out a few other nearby optimizations that compromise maintainability (e.g. relying on $_ not being modified inside a complex loop). Added a comment indicating why the line numbers from perl action diagnostics are off by a little.
    • Rule.pm, makepp, t/client_server.test: Flush the log file before a perl action fails. (Probably not robust with -j, but it's better than nothing.) Made diagnostics from perl actions a little more readable.
  • 2005-04-28 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (format_exec_args): Reinstate { for Bash patterns.
    • t/variable_expansion.test: Move trivial 2004_02_11_export_colon.test into this one.
  • 2005-04-27 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm: Minor optimizations, which didn't improve much but the code shrunk a lot. (%skip_over): New lookup table. (split_on_whitespace): Don't treat ` specially. (split_commands): Don't split $(cmd; cmd), $((var|5)), ${var:-foo&bar} and "$(cmd "foo;bar")". (skip_over_make_expression): Handle $((perl if( $a ) {...})) or ${{shell find . -exec ls {} \;}}. (format_exec_args): Recognize = only after first word, {} not at all (where it's special, there must also be a ;), : and . only as commands and additionally []. (strip_indentation): New function replaces whitespace_len. (unquote): Handle x 'y' z correctly and also barf on trailing slash after ".
    • Makefile.pm (expand_text): Handle $((perl if( $a ) {...})) or ${{shell find . -exec ls {} \;}}. (parse_rule): Use strip_indentation. (_read_makefile_line_stripped_1): Handle comments after ifdef/ifeq. Fix problems with ifeq and quoting which became evident after the above unquote fix.
    • t/conditionals.test: Test above ifdef/ifeq fixes.
    • t/perl.test: Test $((perl )).
    • t/additional_tests/2004_12_17_idl.test: Fix problems with AIX and BS2000 compiler pickiness. This evidences a new problem with parsing $(CC) .. >$(output), which only works if there is a space after >, but I didn't find where that gets parsed.
    • pod/makepp_functions.pod: Document $(( )) and ${{ }} at perl and shell.
  • 2005-04-26 Anders Johnson <ajohnson@nvidia.com>
    • Scanner/C.pm: Fixed a bug wherein $_ gets clobbered.
    • ActionParser.pm, ActionParser/Legacy.pm: Add a log message when it decides that scan info can'tbe cached.
    • Makesubs.pm, pod/makepp_functions.pod, t/conditionals.test: Added $(iftrue). Preload CommandParser::Gcc and CommandParser::Basic, and avoid some shift statements, for efficiency.
    • TextSubs.pm: Accept ".pp" files as cpp input files.
    • Makefile.pm, Rule.pm, pod/makepp_rules.pod: Add :dispatch rule option.
    • FileInfo_makepp.pm: Track changes to is_stale in parse_build_info_file, and add comments that future tracking may be necessary.
    • CommandParser.pm: Fix a bug in add_optional_dependency, and add a comment so that it's more clear what's going on.
  • 2005-04-21 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm: Call FileInfo as functions, don't modify call stack where not needed and other minor optimizations, especially within nested loops.
  • 2005-04-19 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner.pm, Scanner/C.pm, Scanner/Esqlc.pm: Call FileInfo as functions, don't modify call stack and other minor optimizations. (xscan_file): Don't treat "//*...*/" as "/".
    • t/additional_tests/2004_12_17_idl.test: Extend this as in our real use, namely that a C++ source includes a header, which has to be generated from IDL. This currently gives a warning.
  • 2005-04-16 Daniel Pfeiffer <occitan@esperanto.org>
    • FileInfo.pm, FileInfo_makepp.pm: Completely take out internal object orientation, replacing costly $finfo->method, with method( $finfo ), or mostly where possible even &method, reusing stack. Optimizations like no modifications of stack, no unneeded my variables, tr instead of s, no double quotes unless interpolation is wanted.
    • Makesubs.pm: Alias only functions, not whole blob. Optimizations like no modifications of stack, no unneeded my variables (many set $makefile_line but never used it), tr instead of s, join two s which only differ in one char, no double quotes unless interpolation is wanted.
    • ActionParser.pm: Small optimizations like no modifications of stack, no double quotes unless interpolation is wanted. (parse_rule): Add dependency on makefile if action includes perl {} or a user-defined c_command. Add dependency on external Perl script if that is called via &script.
    • Makecmds.pm (run): Use Makesubs::f_find_program. (&uniq): Invert meaning of -c.
    • t/builtins.test (&uniq): Invert meaning of -c.
    • t/additional_tests/2004_12_06_scancache.test: #undef because AIX xlc doesn't allow redefinition.
  • 2005-04-12 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_cut): Repair --printf and lists. (c_printf): No implicit newline and thus remove --nonewline. (c_template): Give it an assignment and Perlcode embedding syntax, and allow arguments to macros.
    • t/builtins.test: Update tests.
    • pod/makepp_builtins.pod: Update.
    • pod/makepp_builtin.pod: Reflect that yacc rule uses builtin &mv.
  • 2005-04-07 Anders Johnson <ajohnson@nvidia.com>
    • Makesubs.pm, ActionParser/Legacy.pm, pod/makepp_scanning.pod, pod/makepp_statements.pod: Allow a scanner subroutine from a rule option to return a CommandParser object. Removed Makesubs::parser_c_compilation, because it's no longer needed. Updated docs accordingly.
  • 2005-04-07 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm: $0 in all errors now added by Rule. (getopts): Moved to main in preparation for makepp (was _getopts). (Makecmds): New package automatically considered by Rule. (eval_or_die, _chomp, _escape): New functions. (-E, --no-escape): New option as in Gnu echo. (-s, --separator): Lowercased short option as in Gnu tac or fmt. (c_echo): Handle \escape sequences. (c_cut, c_printf, c_yes, c_uniq): New commands.
    • Rule.pm (execute_command): Handle #comment after builtins. Fix error messages at least to line number of beginning of rule (we don't really know what line a single command came from).
    • t/builtins.test: Add tests for new commands and features.
    • t/special_chars_unix.test: Fix trailing slash in &echo by suppressing \escapes. Remove redundant check for Cygwin already handled by test name.
    • install.pl (highlight_variables): Remove 5.005 fix of nested <dl> which was broken on newer correct pod2htmls. Fix hyperlinks to names with leading &.
    • pod/makepp_builtins.pod: Embolden first chars in index. Update documentation.
    • pod/makepp_cookbook.pod: Fix example documentation to 4 space indentation and use &builtins where possible.
  • 2005-04-06 Anders Johnson <ajohnson@nvidia.com>
    • makepp, Scanner.pm, Scanner/C.pm: Add trailing newlines to a bunch of warnings that shouldn't spew makepp internals.
  • 2005-04-04 Anders Johnson <ajohnson@nvidia.com>
    • makepp, Rule.pm, CommandParser.pm: If scanning fails because a meta-dependency failed to build, then keep track of the failed dependency so that the root cause target can be reported. Also, when scanning fails, don't try to build the dependencies that we know about unless -k is specified, because $MakeEvent::exit_on_error is locally reset even if it isn't.
    • Makesubs.pm: Removed the old scanner_c_compilation (again), this time adding a parser_c_compilation so that it will work when it's specified as a rule option.
    • makepp, t/client_server.test: Changed final message from "compilation aborted" to the more general "build failed".
    • t/variable_expansion.test, t/directories.test, t/additional_tests/2005_02_17_define.test, t/additional_tests/2005_01_31_slash.test: Moved some trivial tests into larger tests, for testing efficiency.
    • t/additional_tests/2005_03_31_scanfail.test: Test for the scanner diagnostic change, as well as the 3/31/05 include directive cache fix.
    • t/makepp_test_case: Issue a warning when it sees a cleanup_script, in case it's being used like I've been using it until now.
  • 2005-03-31 Anders Johnson <ajohnson@nvidia.com>
    • Scanner.pm: Fixed a bug in which include directives weren't cached unless a corresponding file was found.
    • makeppclean: Fixed she-bang.
  • 2005-03-30 Anders Johnson <ajohnson@nvidia.com>
    • makepp: Fixed an intermittent problem that has been plaguing recursive_make_unix.test since Gary's 1/8/05 change.
  • 2005-03-29 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (_getopts): Accept `-' argument again. (%opt): Apply --force to --output too. New --record-size option. (c_cat): Accept -f, -i & -I. (c_cp): Accept -f. (c_expr): New command. (c_grep): Accept -r. (c_mkdir): Mode defaults to 755. Return created dirs when called as function. (c_install): Accept -g, -l & -o
    • install.pl (pod2html): Italicise item after first space only if there is no comma before, else after first `='.
  • 2005-03-21 Anders Johnson <ajohnson@nvidia.com>
    • CommandParser.pm, Makesubs.pm, pod/makepp_statements.pod: Added s_runtime.
    • CommandParser.pm: Added add_optional_dependency method.
    • FileInfo.pm, FileInfo_makepp.pm, Makesubs.pm, Rule.pm, Glob.pm Scanner.pm, makepp: Trust cached stat info if the filesytem hasn't been touched. (This makes the NVIDIA chip-level null build about 5X faster!)
    • FileInfo.pm: Fixed is_writable_owner bug (it used to always return 0). Fixed handling of trailing slashes (it used to turn "/" into ".").
    • Makefile.pm: Issue a warning if an expression resolves to undef. Remove trailing "\n" from a define ... endef, for GNU make compatibility.
    • Makefile.pm, Makesubs.pm: Added Makefile::cd method.
    • Makefile.pm, makepp, pod/makepp_command.pod: Added --dump-makefile option.
    • Makesubs.pm, pod/makepp_functions.pod: Added f_filter_out_dirs, s_register_command_parser. Fixed s_register_scanner.
    • Rule.pm: Improved internal diagnostics. Added setup_environment back, because some of our custom scanners use it. (It's now just a wrapper.) Fixed exec_or_die so that it always terminates the process before it goes out of scope. Refactored duplicated code into expand_additional_deps. Ignore empty actions, so that we don't try to exec them.
    • makepp: Signal handling tweaks. Added comment explaining why the "despicable idiom" is despicable. Added descriptive error message if process scoping is broken.
    • makepp, Rule.pm: Added --final-rule-only option.
    • t/additional_tests/2005_01_17_runtime.test, t/additional_tests/2005_01_31_slash.test, t/additional_tests/2005_02_17_define.test: New tests.
  • 2005-03-20 Anders Johnson <ajohnson@nvidia.com>
    • t/additional_tests/2004_04_27_else.test, t/conditionals.test: Merged the trivial "else" test into "conditionals".
  • 2005-03-18 Anders Johnson <ajohnson@nvidia.com>
    • t/wait_timestamp.pl: Make it work when overwriting an empty file doesn't update the timestamp. (Some of the NVIDIA machines do this, others don't.)
    • t/dry_run_what_if.test: Don't run makepp again until the current time is greater than the newest file (not the oldest).
  • 2005-03-18 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl: Document -v and also make it output time stats.
    • t/dry_run_what_if.test: Fix file not always closed problems.
  • 2005-03-17 Daniel Pfeiffer <occitan@esperanto.org>
    • t/run_tests.pl (makepp, execute): New functions. (test_loop): For each of the possible scripts, check for an alternative Perl variant. Also catch internal errors, such as dangling critical sections.
    • t/wait_timestamp.pl: New file.
    • t/**/*.test: Eliminate almost all sleeps, replacing them with the minimum wait till we get a new timestamp. Also fix tests that failed on some platform.
  • 2005-03-12 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp_builtin_rules.mk (%.y, %.l): Use a more legible &mv.
    • Makesubs.pm (%scanners): Add purecov and quantify. (s_define): Delete leading whitespace at beginning of lines to be consistent with other kinds of rule actions.
    • Makecmds.pm (_getopts): Allow mixing options and arguments and don't get confused by empty argument. (_perform): Write versbose messages to STDERR. (c_cat): New command. (c_rm): When deleting metainfo, also delete .makepp/, if it becomes empty.
    • t/run_tests.pl ($makepp_path): Localize, so it can be accessed in modules loaded with do(). (execute): New function for alternately running a script if found with .pl appended as a module, or as a shell script. (foreach $tarfile): Use execute for all three scripts optionally available.
    • t/**/*.test: Replace some shell scripts with modules, and use builtin commands wherever possible.
  • 2005-03-06 Daniel Pfeiffer <occitan@esperanto.org>
    • Makefile.pm (setup_environment): Method moved from Rule.pm.
    • Makesubs.pm (%scanners): Add AIX compilers. (f_shell): Propagate exported variables. (f_shell_global_once, f_shell_once): New functions.
    • Rule.pm (execute_command): Avoid dangling critical section when some &command isn't found.
    • Makecmds.pm (c_sed): New name for c_filter. (c_rm, c_chmod, c_cp, c_install, c_mv, c_rm): New commands. (--count, --except): New options for c_grep.
    • t/builtins.test: Test all changes.
    • pod/makepp_builtins.pod: Document all changes.
  • 2005-02-02 Daniel Pfeiffer <occitan@esperanto.org>
    • Makecmds.pm (c_grep): New command. (--infail, --outfail, --separator): New options.
    • t/builtins.test: Test them.
    • pod/makepp_builtins.pod: Document them and fixes.
  • 2005-01-21 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (execute_command): Set $0 while executing &builtin.
    • Makecmds.pm: New lib.
    • install.pl: Install it.
    • Makesubs.pm (scanner_c_compilation): Reanimate this function until the new variant works right. (f_word, f_wordlist): Negative indices count from end. (run, run_forked, c_ln): Moved to Makecmds.pm.
    • pod/makepp_builtins.pod: New POD.
    • t/builtins.test: New test.
    • t/additional_tests/2004_12_17_idl.test: New test.
  • 2005-01-09 Daniel Pfeiffer <occitan@esperanto.org>
    • TextSubs.pm (unquote_split_on_whitespace): New function. (unquote): Default arg to global $_.
    • Rule.pm: Use unquote_split_on_whitespace and argless unquote. (split_actions): Find new &action. (execute_command): And handle it.
    • Makesubs.pm: Use unquote_split_on_whitespace and argless unquote. (f_perl, eval_or_die): Make $(perl) be evaluated in list context. (c_ln): New function.
    • CommandParser.pm, Makefile.pm: Use unquote_split_on_whitespace and argless unquote.
    • pod/makepp_rules.pod, pod/makepp_extending.pod: Document &action.
    • t/perl.test: Adapt to changed context of $(perl) and test &action.
  • 2005-01-08 Gary Holt <holt-makepp@gholt.net>
    • Makefile.pm (read_makefile), AutomakeFixer.pm: new code to get rid of all the unnecessary and harmful junk that automake puts into makefiles. This is a step in the direction of more full support for automake/configure.
    • makepp (recursive_make_connection): Fix error handling problem where a die in makepp when activated through recursive_makepp exited make in the middle of a critical section and the error was never printed.
  • 2005-01-06 Gary Holt <holt-makepp@gholt.net>
    • Makefile: delete this file, because it's not really useful until the user runs configure anyway, and it is making packaging of makepp harder for Debian.
    • config.pl: Add makepp_compatibility.html to the tar file.
    • pod/makepp_statements.pod (statements): Fix error reported by Ian Zimmerman in the documentation of _include.
  • 2005-01-05 Daniel Pfeiffer <occitan@esperanto.org>
    • Signature/c_compilation_md5.pm (md5sum_c_tokens): Put one space after each token and ignore any whitespace after last token.
    • Makesubs.pm (run): Make @ARGV be a modifiable copy.
    • pod/makepp_signatures.pod (c_compilation_md5): Document putting ${Log}$ (braces against this file in CVS) after last token.
    • pod/makepp_compatibility.html: Eliminate 5.005.
    • t/client_server.test: Close file to be sure to flush it. Eliminate workaround for makeppclient not being executable in CVS.
  • 2005-01-02 Gary Holt <holt-makepp@gholt.net>
    • FileInfo.pm (check_for_change): Fix bug where we unnecessarily flush the build info for files linked in from repositories. This caused them not to be deleted on makepp exit.
    • makepp: Fix bug in handling of MAKEFLAGS where we always inserted a minus sign even if MAKEFLAGS contained a variable assignment.
  • 2004-12-29 Gary Holt <holt-makepp@gholt.net>
    • makepp (load_repository_recurse, build): If a target's directory does not exist, but did exist in some repository, then go ahead and make the directory even if we're going to execute the action rather than import the file from the repository. Otherwise the action may fail because the directory doesn't exist.
    • BuildCache.pm (copy_from_cache): Fix bug where we got an undefined value warning if the output directory does not exist.
    • Makesubs.pm (f_filesubst): Fix bug where trailing whitespace messed up the substitution. The symptom of this was that old-style pattern rules failed. (Reported by Ian Zimmerman.)
  • 2004-12-26 Daniel Pfeiffer <occitan@esperanto.org>
    • makepp: Require 5.6 because that's needed for our(). Add -? for --help. Add a global __WARN__ handler and eliminate calls to print_warning in favour of warn.
    • Makesubs.pm (run): Restore __WARN__ and __DIE__ handlers. (run_forked): Close STDOUT & STDERR.
    • Scanner.pm: Eliminate calls to print_warning in favour of warn.
    • Scanner/Esqlc.pm: Reindent. (other_directive): Fix raised warning to cover two file names.
    • config.pl: Require 5.6.
    • install.pl: Require 5.6. Highlight arguments to items as italic. Warn about prior installation having the old pre .makepp/*.mk naming convention.
    • pod/makepp.pod: Document that we require 5.6.
    • pod/makepp_extending.pod: Consistent doc of perl in all places. Fix indentation to always be 4, because that's what install.pl strips off. (run, run_forked): New items.
    • pod/makepp_functions.pod: Consistent doc of perl in all places. Fix indentation to always be 4.
    • pod/makepp_rules.pod: Consistent doc of perl in all places. Put noecho, ignore_error and perl into an enumeration list. Document esqlc_compilation. Fix indentation to always be 4.
    • pod/makepp_statements.pod: Consistent doc of perl in all places. Add arguments to statements. Fix indentation to always be 4.
    • pod/makepp_variables.pod: Fix changed_inputs and add it to index.
    • t/perl.test: Split up script.out into the statement and rule generated parts, because the latter now seems to delete target first.
  • 2004-12-24 Gary Holt <holt-makepp@gholt.net>
    • BuildCache.pm (cache_file): Fixed major problem where files in the build cache could be overwitten by a subsequent compile and therefore be corrupted.
  • 2004-12-23 Gary Holt <holt-makepp@gholt.net>
    • pod/makepp_functions.pod: Add missing entry for find_first_upwards.
    • Makesubs.pm (f_changed_inputs): new automatic variable $(changed_inputs), which properly implements $?.
    • BuildCheck/ignore_action.pm : new ignore_action build check algorithm that doesn't trigger a rebuild if the action string is different.
  • 2004-12-22 Anders Johnson <ajohnson@nvidia.com>
    • Scanner/C.pm: Add filename and line number to diagnositcs.
  • 2004-12-22 Daniel Pfeiffer <occitan@esperanto.org>
    • CommandParser/Esqlc.pm: Rebase this on Gcc.pm because some preprocessors call compiler. Everything copied, because for inheritance to work via parse_arg, we'd need access to most my vars of xparse_command.
    • Scanner/Esqlc.pm (get_directive): Handle $include and lc unquoted filename.
    • Makesubs.pm: Add esqlc scanners. (run_forked): Use POSIX::_exit.
    • t/perl.test (script.pl): Be well behaved and close.
  • 2004-12-20 Anders Johnson <ajohnson@nvidia.com>
    • t/additional_tests/2004_12_20_errors.test: Test case for line numbers in diagnostics.
    • CommandParser/Vcs.pm: Match -f only as a whole option.
    • CommandParser/Gcc.pm, CommandParser/Vcs.pm, Scanner/C.pm, Scanner/Vera.pm, Scanner/Verilog.pm: Reformatted whitespace to conform to the rest of makepp.
  • 2004-12-17 Anders Johnson <ajohnson@nvidia.com>
    • Makefile.pm, Makesubs.pm: If a subroutine defined in a perl_begin, etc., produces a message (warn or die) when called from a function, the line numbers in the message are properly munged. Also, deleted some stale lines that got reinserted due to a merging oversight, and adjusted the line position for perl_begin (as opposed to s_perl, s_sub and f_perl).
    • CommandParser/Vcs.pm: Properly parse the -f option, to that options such as "-full64" don't match.
    • t/additional_tests/2004_12_14_comma.test: Added a comment pointing out that it tests a feature that we ultimately don't want, and it should test what we do want when it works.
  • 2004-12-17 Daniel Pfeiffer <occitan@esperanto.org>
    • Scanner/C.pm (other_directive): New virtual method. (xscan_file): Call it.
    • CommandParser/Esqlc.pm, Scanner/Esqlc.pm: New (flaky) modules.
    • install.pl: Install them.
    • t/esqlc.test: New test.
    • Makesubs.pm (scanner_esqlc_compilation): New scanner. (%Makesubs::scanners): Register it.
  • 2004-12-17 Gary Holt <holt-makepp@gholt.net>
    • run_tests.pl: fix problem where delete $ENV{MAKEPPFLAGS} didn't work, which could cause a test failure due to the user's environment.
    • Makesubs.pm (infer_objects): if an error occurred building a dependency, stop immediately unless --keep-going.
  • 2004-12-17 Anders Johnson <ajohnson@nvidia.com>
    • BuildCheck.pm, CommandParser.pm, Makefile.pm, Rule.pm, makepp, BuildCheck/exact_match.pm, BuildCheck/target_newer.pm, pod/makepp_rules.pod, t/additional_tests/2004_11_16_envdep.test: Added support for dependencies on environment variables.
    • FileInfo_makepp.pm, Glob.pm, Makesubs.pm, Scanner.pm, makepp, pod/makepp_command.pod, t/additional_tests/2004_11_02_rmstale.test: Added --rm-stale option.
    • Glob.pm, t/additional_tests/2004_12_14_comma.test: Wildcard functions don't match filenames containing commas. (A temporary measure, until they can be safely passed to functions that currently interpret them as argument delimiters.)
    • MakeEvent.pm, makepp, t/client_server.test: Signal handling fixes. Don't leave processes running in the background. Ignore SIGINT and SIGQUIT if the child process absorbs them, but propagate them if the child process terminates from them. Send children signals on TERM and HUP. Redirect STDIN if running in parallel. Propagate errors from targets even if $error_found is set. Mark targets as failed the the command was begun and then interrupted.
    • Makesubs.pm: Removed scanner_c_compilation, because its role has been subsumed by CommandParser::Gcc.
    • CommandParser.pm, Scanner.pm: Reformatted whitespace to conform to the rest of makepp. (More of this to come, after functionality changes are committed, so they aren't obscured by the space diffs.)
    • Rule.pm, makepp: Added --profile option (not documented).
    • Rule.pm: Use POSIX::_exit instead of exit, to avoid garbage collection.
    • config.pl, install.pl, makeppclean, pod/makeppclean.pod, pod/makepp.pod: Added makeppclean utility.
    • FileInfo_makepp.pm, makepp, pod/makepp_command.pod: Added --sandbox & --dont-read options.
    • CommandParser/Vcs.pm: Added support for almost every VCS 7.1 option that generates dependencies.
    • t/additional_tests/2004_12_06_scancache.test: Tests that targets built on behalf of cached scanner info can fail without stopping the build if they aren't actually needed.
    • t/additional_tests/2004_12_14_clean.test: Tests signal propagation and makeppclean.
    • Makefile.pm, t/additional_tests/2004_12_16_endif.test: Fixed parsing of commands whose executable is "perl".
    • CommandParser.pm, Rule.pm: Scanner failures are propagated with die "SCAN_FAILED\n", so that we don't need to check for failure at every level of the call stack.
    • CommandParser.pm, Scanner.pm: Ignore include of file whose name is the empty string.
    • Scanner.pm: Log the file that included a file to be scanned.
    • FileInfo.pm, makepp: Added --gullible option (not documented).
    • FileInfo_makepp.pm: Refactored repetition into build_info_fname.
  • 2004-12-17 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (run): Prefer local script over one found in $PATH.
    • t/perl.test: Revert fix.
  • 2004-12-16 Anders Johnson <ajohnson@nvidia.com>
    • t/perl.test, t/additional_tests/2004_05_04_double_dollar: Fixes to make them work whether or not "." is in $PATH.
  • 2004-12-15 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (eval_or_die): Use print_warning. (run, run_forked): New functions.
  • 2004-12-12 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (rewrite_message): New function. (eval_or_die): Use it to also massage warning's locations. (s_define): Don't handle comments or conditionals since GNU make doesn't either. (read_block): New function. (s_perl, s_sub): Use it. (s_perl, s_perl_begin): Revert $makefile magic, more cleanly handled in skip_makefile_until_else_or_endif.
    • Makefile.pm (read_makefile_line_stripped): Don't do conditionals in define. (skip_makefile_until_else_or_endif): Also handle (make)sub and define with regard to `else' and use read_block instead of $makefile magic.
  • 2004-12-10 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (execute_command): Massage error location for perl command.
    • FileInfo_makepp.pm (clear_build_info, update_build_infos) (load_build_info_file): Rename .makepp files with suffix .mk.
  • 2004-12-09 Daniel Pfeiffer <occitan@esperanto.org>
    • Makesubs.pm (eval_or_die): Fix line numbering and IDE friendly error message format. (s_perl, s_perl_begin): Add special case without argument, to only skip input.
    • Makefile.pm (read_makefile_line_stripped): Add ifperl and ifmakeperl. Document two unfixed bugs. (skip_makefile_until_else_or_endif): Add ifperl and ifmakeperl. Also handle else within perl { }. Let the statement functions do the parsing for perl { } and perl_begin.
    • t/conditionals.test: Test these fixes and additions.
  • 2004-11-23 Gary Holt <holt-makepp@gholt.net>
    • Makesubs.pm (s_no_implicit_load): Fix bug where we didn't expand variables in a number of statements.
  • 2004-11-22 Anders Johnson <ajohnson@nvidia.com>
    • t/md5.test: Back to using dumb sleep's, because otherwise the .o can look like it didn't change if the compiler runs in less than a second.
    • BuildCheck/exact_match.pm, BuildCheck/architecture_independent.pm: Completed BuildCheck::exact_match POD (which ended abruptly). BuildCheck::architecture_independent chains to exact_match in a manner that is more resilient to change.
  • 2004-11-19 Anders Johnson <ajohnson@nvidia.com>
    • BuildCheck.pm, Rule.pm, BuildCheck/exact_match.pm, BuildCheck/target_newer.pm: Fixed the detection of changed dependencies for using cached scanner info.
    • Scanner/Vera.pm: Fixed a stupid //g bug.
    • Scanner/Verilog.pm: Doesn't require module name and instance name to be on the same line.
    • ActionParser/Specific.pm: Allows specified class to be defined inline, instead of in its own file in @INC. Automatically adds "CommandParser::" prefix to class name, if necessary.
    • t/additional_tests/2003_10_11_idash.test: Added the sleep calls required to make it run reliably.
    • Makefile: Reverted Gary's changes to BINDIR, etc., which were surely accidental.
    • pod/makepp_scanning.pod: Fixed a typo.
  • 2004-11-03 Gary Holt <holt-makepp@gholt.net>
    • t/run_tests.pl: Remove MAKEFLAGS and MAKEPPFLAGS from the environment before running the tests.
    • Makefile.pm (read_makefile_line_stripped): Fix problem where variables tested with ifdef sprung into existence in the command line variables hash.
  • 2004-09-29 Daniel Pfeiffer <occitan@esperanto.org>
    • Rule.pm (sorted_dependencies): eliminate superfluous rebuilds that occur due to random sorting of homonymous files from different directories.
  • 2004-08-14 Gary Holt <holt-makepp@gholt.net>
    • Makesubs.pm (scanner_c_compilation): Fix problem where makepp did not exit with a fail status if one of the scanner prerequisites failed to build.
  • 2004-07-13 Anders Johnson <ajohnson@nvidia.com>
    • Makefile.pm, t/additional_tests/2004_04_27_else.test, t/additional_tests/2004_04_27_target_specific_append.test, t/additional_tests/2004_04_28_unshift_makefile_lines.test, t/additional_tests/2004_05_13_ifdef.test: If the first assignment is a target-sepcific '+=', then use deferred evaluation and don't prepend a space. Print a log message when we detect a recursive makefile. Added a mechanism for programmatically inserting text for the makefile parser to process. When inside an ifdef, ignore 'else' inside a perl_begin. In an override situation, defined but false counts.
    • FileInfo_makepp.pm: Set default $directory_first_reference_hook to 0 instead of sub {} to speed things up a little. Consider ancestor directories "referenced" when a directory is first referenced. Re-read symbolic links before relying on them. Added more log messages for repository links.
    • FileInfo_makepp.pm, Makefile.pm: Added :multiple_rules_ok.
    • FileInfo.pm: Refactored link_deref to avoid repetition.
    • Makesubs.pm: Added f_find_first_upwards. Refactored to use Makesubs::prebuild.
    • Makefile.pm, Rule.pm: Deal with setting up environment while building a makefile's targets (e.g. s_prebuild) before the makefile is completely loaded.
    • Rule.pm: Log targets that are built as cached scanner dependencies. Log when attempting to retrieve scanner info.
    • Scanner.pm: Log when a file isn't scanned because it's unwritable or in a system area. Don't attempt to scan a directory.
    • install.pl, makepp: If the html is installed in the usual place, then point to the makepp install that you're actually using in the --help message. (Useful when the makepp install emanates from source control.)
    • makepp: Print the makepp invocation at the top of the log file. Fixed a bug with $prune_code. Don't perform a build_check when linking in a *source* file from a repository.
    • CommandParser/Vcs.pm: Use named vars in loops.
    • Scanner/Verilog.pm: Allow include files to define modules. Scan files even if they are unwritable, because compiling Verilog generally involves linking as well as compilation. Add xor and xnor to built-in primitives. Allow UDP's. Allow instances to have the open paren on the following line. Allow include files to terminate with an open module (e.g. if the include directive is inside a module definition).
    • pod/makepp_repositories.pod: Added some more info regarding the semantics of repositories.
    • pod/makepp_scanning.pod: Added info for ActionParser::Specific and for --force-rescan.
  • 2004-05-28 Gary Holt <holt-makepp@gholt.net>
    • BuildCheck/architecture_independent.pm: New build check method that ignores architecture.
  • 2004-05-24 Gary Holt <holt-makepp@gholt.net>
    • Makefile.pm (parse_rule): Fix broken build_cache and build_check modifiers.
    • Makesubs.pm (s_build_cache): Fix broken build_cache statement.
  • 2004-05-21 Gary Holt <holt-makepp@gholt.net>
    • makepp_build_cache_control: Give error if bogus command entered.
  • 2004-05-20 Gary Holt <holt-makepp@gholt.net>
    • Rule.pm (load_scaninfo_single): Fix bug in scanner where files included with #include "filename" were not found correctly from the cached scan info if they were located in the current directory, so the meta dependencies were always regarded as out of date.
  • 2004-05-17 Gary Holt <holt-makepp@gholt.net>
    • Makesubs.pm (s_include): Look for <filename>.makepp before looking for <filename> to help with builds that have to work with both makepp and make.
    • Makefile.pm (read_makefile_line_stripped): Accept comments on ifeq (,) lines too.
  • 2004-05-11 Gary Holt <holt-makepp@gholt.net>
    • makepp: Check environment variable MAKEPPFLAGS as well as MAKEFLAGS to get options. This allows a user to specify options in his .bashrc file that apply to all makepp builds but not to make builds.
    • makepp (print_log_scan): Make it possible to turn off the log messages from the scanner separately from all the others. Added the --nolog-scan option.
  • 2004-05-10 Gary Holt <holt-makepp@gholt.net>
    • CommandParser/Gcc.pm (xparse_command): Add .sl as a shared library extension (for HPUX).
  • 2004-05-08 Gary Holt <holt-makepp@gholt.net>
    • FileInfo_makepp.pm (move_or_link_target): Fix bug where build info on files copied from repositories was flushed, which meant the files sometimes didn't get cleaned up on makepp exit.
  • 2004-05-03 Gary Holt <holt-makepp@gholt.net>
    • Makefile.pm (expand_text): Fix bug reported by Ian Zimmerman where $$ with rc_substitution=0 wasn't working.
  • 2004-04-22 Anders Johnson <ajohnson@nvidia.com>
    • t/additional_tests/2004_04_22_envexe.test, CommandParser.pm: Don't add executable dependency if it contains shell metacharacters.
    • FileInfo_makepp.pm: A target of additional dependencies is not considered stale. (See earlier comment in the same file.)
    • Scanner/Verilog.pm: Support multi-line comments.
    • makepp: Eliminated deprecated --default-makeppfile. Allow --load-makeppfile as a synonym for --load-makefile. Fixed a bug with --load-makefile in which other makefiles were sought before the initial makefiles were loaded. Issue an error rather than executing a rule that would build a target marked for --dont-build (in case the user modified it on purpose).
  • 2004-04-19 Anders Johnson <ajohnson@nvidia.com>
    • Glob.pm, t/additional_tests/2004_04_19_onlyphony.test: With $(only_phony_targets), only the file part of the glob is supposed to be phony, *not* the ancestor directories.

Documentation

Compatible but improved replacement for make
How makepp executes a makefile
How to set up and use build caches
How makepp decides to rebuild files
Built in rules for makepp
Builtin commands in makepp
Command line syntax for makepp
Compatibility list for makepp
The best way to set up makefiles for various situations
How to extend makepp using Perl
Frequently asked questions about makepp
Functions in makepp
Incompatibilities between makepp and GNU make
All keywords, functions and operators in makepp
Major changes in each version of makepp
How to use repositories for variant builds, for maintaining a central set of sources, and other things
How to tell makepp to build something
How to partition a makepp build
How makepp finds include files and other hidden dependencies
How makepp knows when files have changed
How to make makepp faster
Various statements in a makefile
Tutorial on writing makefiles
Unix compilation commands
How to use variables in makepp
Stand-alone access to builtin commands in makepp
Stand-alone cleanup script for makepp
Graphical analysis of the dependency graph
What makepp knows about files
Textual analysis of the build log
Fast repeater of selected makepp actions
How to make Perl faster

Modules

Mpp
Common subs for makepp and makeppreplay
Makepp scanner class for legacy interface
Makepp scanner class for a specified command scanner
subroutines for handling the makepp build cache
Externally usable management commands
Interface definition for various signature classes
A build check method that ignores changes in architecture
a signature class that requires that dependencies have exactly the same signature they did on the last build
A build check method that ignores changes in the command.
A build check method that only looks at the command.
a build check class that uses the traditional Make algorithm
Builtin commands for makefiles
Base class for makepp command parsers
makepp command parser for various Esql preprocessors
makepp command parser for gcc or cc
makepp command parser for swig
makepp command parser for Synopsys VCS
event loop for makepp
cached information about files and directories
optional subs to complement Mpp::File
Fix Automake crap
Fix CMake Makefiles so they become nice
Subroutines for reading directories easily.
Makepp lexer for finding commands and redirections in a rule
an object that groks makefiles and stores their relevant info
Support for making dumb recursive make smart
Makepp repository functionality
Stores information about a build rule
Base class for makepp file scanners
makepp scanner for C-like files
makepp scanner for Embedded SQL C files
makepp scanner for SWIG's .i files
makepp scanner for Vera files
makepp scanner for Verilog files
Interface definition for various signature classes
a signature class that ignores changes to whitespace and comments
Mpp::Signature class based on MD5 checksum
a signature class that ignores changes to shared objects
a signature class that ignores changes to whitespace and comments
a signature class that ignores insignificant changes and comments
Functions and statements for makefiles
Subs for manipulating typical makefile text
module to convert pod files to HTML

Provides

Mpp
in Mpp/BuildCacheControl.pm
in Mpp/BuildCache.pm
in Mpp/Rule.pm
in Mpp/Event.pm
in Mpp/Repository.pm
in Mpp/Signature/xml_space.pm