+2013-06-14 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Collect distributable package files in user specified directory.
+
+ * Makefile.in (distdir): New macro; define default as abs_builddir.
+ (srcdist, bindist, licdist): Use it; direct generated tarballs to it.
+ (%.txt.dist): New pattern rule; define, and use it to make a copy...
+ (readme.txt): ...of this, in distdir, when processing...
+ (dist): ...this build objective.
+
+2013-06-14 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Handle Microsoft's 32-bit vs. 64-bit time_t ambiguity.
+
+ * src/apihook.c: New file; it provides...
+ (have_api): ...this helper; it checks for availability of any specific
+ API function, within a specific system DLL, (MSVCRT.DLL by default).
+
+ * src/tarproc.cpp (have_utime64_api): New inline function; it wraps...
+ (have_api): ...this, to check whether MSVCRT.DLL provides...
+ (commit_saved_entity) [_utime64]: ...this; use if available, else...
+ (commit_saved_entity) [!_utime64]: ...fall back to using...
+ (utime): ...this.
+
+ * Makefile.in (CORE_DLL_OBJECTS): Add apihook.$OBJEXT
+
+2013-06-13 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Facilitate package extraction and registration at setup time.
+
+ * src/pkgproc.h (IMPLEMENTATION_LEVEL): Add filters to facilitate
+ implementation of distinct setup time archive processing behaviour.
+ (pkgArchiveProcessor::save_on_extract): New property; declare it.
+ (pkgArchiveProcessor::SaveExtractedFiles): New method; implement it.
+ (pkgArchiveProcessor::SetOutputStream): New method; declare it.
+
+ * src/tarproc.cpp (IMPLEMENTATION_LEVEL): Add filters to implement
+ distinct setup time specific archive processing behaviour.
+ (pkgArchiveProcessor::SetOutputStream): Implement it.
+ (pkgTarArchiveExtractor::ProcessDataStream): Use it.
+ (pkgTarArchiveInstaller::ProcessDataStream): Likewise.
+
+2013-06-13 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement some GUI progress metering dialogue enhancements.
+
+ * src/pkgbase.h (pkgProgressMeter): Don't pre-empt private features
+ of derived progress metering classes; hence, we no longer need this...
+ (AppWindowMaker): ...as a forward class declaration; delete it.
+
+ * src/guimain.rc (IDD_REPO_UPDATE): Resize, and adjust layout.
+ (IDD_PROGRESS_VAL, IDD_PROGRESS_MAX, IDD_PROGRESS_PCT): Add these
+ dialogue box progress counter display elements.
+
+ * src/pkgbind.cpp (pkgRepository::GetPackageList): Adjust style of
+ progress status messages, to suit reporting via GUI dialogue box or
+ CLI console, as appropriate.
+
+ * src/guiexec.cpp (ProgressMeterMaker): Redefine class, in terms of...
+ (PROGRESS_METER_CLASS): ...this new generic class name macro.
+ Reimplement private members, previously inherited from base class;
+ adjust class constructor to ensure that they are initialised.
+ Delete explicit destructor; a default destructor is now sufficient.
+ (ProgressMeterMaker::SetRange, ProgressMeterMaker::SetValue):
+ (ProgressMeterMaker::Annotate): Factor out; reimplement them...
+
+ * src/pmihook.cpp: ...in this new file, as generalised methods of...
+ (PROGRESS_METER_CLASS): ...the class named by this macro.
+ (PROGRESS_METER_CLASS::PutVal): New private method; implement it.
+
+2013-05-31 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Avoid a potential macro definition conflict.
+
+ * src/pkgbase.h (strcasecmp) [__MINGW32__]: Use string.h definition.
+
+2013-05-15 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Streamline build-time dependency tracking procedures.
+
+ * Makefile.in (DEPFLAGS): Adjust for simultaneous .o/.d generation.
+ (RC_DEPFLAGS): New macro; define dependency generation flags for the
+ resource compiler, which can't handle the new DEPFLAGS methodology.
+ (%.c, %.cpp, %.rc): Simplify $OBJEXT generation procedures.
+ (%.time): Remove redundantly replicated build-time procedure from...
+ (%.tagged.time): ...this; just make it a prerequisite.
+
+2013-05-15 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Add resources for specification of product version.
+
+ * src/verinfo.rc src/verinfo.h.in: New files; included by...
+ * src/guimain.rc: ...this, whence also specify version information...
+ (VERINFO_FILE_NAME, VERINFO_INTERNAL_NAME, VERINFO_FILE_DESCRIPTION):
+ (VERINFO_FILE_VERSION, VERINFO_FILE_VERSION_STRING): ...per these new
+ manifest constant macros; define them, with propagation to...
+ (ID_MAIN_WINDOW_CAPTION): ...this; keep it consistent.
+
+ * Makefile.in (TAG_SCRIPT): Include invocation for...
+ (PACKAGE_VERINFO_SCRIPT): ...this new macro; defined to interpret...
+ (PACKAGE_VERINFO_PRODUCT_VERSION): ...this new substitution template;
+ it is used in src/verinfo.h.in, whence verinfo.h is generated.
+ (RC_INCLUDES): Add current working directory, for...
+ (verinfo.h): ...this; add rule and dependencies to generate it.
+
+2013-05-14 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Make application manifest resource definition reusable.
+
+ * src/manifest.rc: New file; factor content from...
+ * src/guimain.rc: ...here, whence include it.
+
+2013-05-08 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Extend DMH services to delay-loaded DLL clients.
+
+ * src/dmhcore.h (dmh_bind): New function; declare it.
+ * src/dmhcore.cpp (dmh_bind): Implement it; it provides an API through
+ which the setup tool makes its existing DMH services available to post
+ install hooks in mingw-get-0.dll, which cannot be loaded until after
+ the providing package has been downloaded and unpacked.
+
+2013-05-08 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Avoid unnecessary command line globbing in GUI applications.
+
+ * src/guimain.cpp src/guistub.cpp (_CRT_glob): Declare as extern "C";
+ initialise to zero, so overriding the runtime start-up default.
+
+ * src/rites.c [! IMPLEMENT_INITIATION_RITES] (_CRT_glob): Initialise
+ to zero here too; lastrites.exe doesn't need globbing either.
+
+2013-05-04 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Address some GCC-4.7 string initialisation warnings.
+
+ * src/pkglist.cpp (AppWindowMaker::InitPackageListView): Declare all
+ headings[].text initialisers as 'const'; cast to 'char *' as required.
+ (pkgListViewMaker::Dispatch): Ditto, when inserting the 'const' empty
+ string into the list, as a component class value.
+
+ * src/pkgdata.cpp (AppWindowMaker::InitPackageTabControl): Declare all
+ TabLegend[] initialisers as 'const'; cast to 'char *' as required.
+
+2013-05-02 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Correct a spin wait thread synchronisation issue.
+
+ * src/pkgnget.cpp (pkgDownloadMeterGUI::SpinWait): Handle stop
+ requests explicitly; acknowledge when waiting thread has stopped.
+ (pkgDownloadMeterGUI::SpinWaitAction): Raise explicit stop requests;
+ wait for acknowledgement that waiting thread has stopped.
+
+2013-04-23 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Select compressed data streaming filters for use by setup tool.
+
+ * src/pkgstrm.cpp [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]:
+ Exclude the implementations of all decompression filters, except...
+ (pkgXzArchiveStream): ...this, together with its requisite methods...
+ (pkgArchiveStream, pkgLzmaArchiveStream): ...from these.
+
+2013-04-23 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Adapt internet download agent for use by setup tool.
+
+ * src/pkgbase.h: More code rearrangement, exposing...
+ (safe_strcmp): ...this in any implementation context, controlled...
+ [USES_SAFE_STRCMP && ! HAVE_SAFE_STRCMP]: ...by this; when true...
+ (HAVE_SAFE_STRCMP): ...define this to 1, (must be non-zero).
+ [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: Ensure that...
+ (USES_SAFE_STRCMP): ...this is defined to 1, (i.e. non-zero).
+ (EXTERN_C): Relocate macro definition...
+ * src/pkgimpl.h: ...to here; add complementary implementation of...
+ (BEGIN_C_DECLS, END_C_DECLS): ...these new macros; define them.
+
+ * src/pkginet.h (pkgDownloadMeter::SpinWait): New static method;
+ declare it as inline, to be implemented elsewhere, delegating to...
+ (pkgDownloadMeter::SpinWaitAction): ...this new protected virtual
+ method; declare and implement it inline, as a "do nothing" base
+ class method, to be optionally overridden in a derived class.
+
+ * src/pkginet.cpp (pkgDownloadMeter::SpinWait): Implement it.
+ (pkgInternetAgent::OpenURL): Use it to invoke SpinWaitAction().
+ (USES_SAFE_STRCMP): Define as 1; (safe_strcmp() is required).
+ [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]: Filter out code
+ which may not be required in more specialised contexts, then...
+ [IMPLEMENTATION_LEVEL == SETUP_TOOL_COMPONENT]: ...add specialised
+ variants specific to this.
+
+ * src/pkgnget.cpp [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]:
+ Filter out code which may not be required in more specialised context.
+ (dmh_setpty): Provide locally declared prototype for external function.
+ (pkgDownloadMeterGUI): Add pseudo-terminal diagnostic message window.
+ (pkgDownloadMeterGUI::SpinWaitAction): Declare and implement GUI
+ specific method specialisation; it invokes a thread, running...
+ (pkgDownloadMeterGUI::SpinWait): ...this new static method overload.
+
+2013-04-19 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement pre-emptive update issue number identification.
+
+ * src/pkgkeys.h (serial_number): Declare function prototype.
+ * src/pkginet.cpp (serial_number): Implementation remains here;
+ promote from static to extern "C".
+
+ * src/pkgbind.cpp (value_assumed_new): New char constant; define it.
+ (pkgRepository::expected_issue): New private member var; declare and...
+ (pkgRepository::pkgRepository): ...initialise it, assuming new.
+ (pkgRepository::GetPackageList): Assign pre-emptively declared issue
+ number, (from package-list references), to 'expected_issue'; compare it
+ with 'current_issue' number recorded within locally stored catalogue.
+ [current_issue >= expected_issue]: Suppress redundant download; adjust
+ diagnostic messages as appropriate.
+
+2013-04-10 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Fix MinGW-Bug #1601 (on new issues tracker).
+
+ * aclocal.m4 (makeopts.m4): New build-aux module; include it.
+ (MINGW_AC_PROG_LEX): New macro; implement it.
+
+ * configure.ac (AC_INIT): Make version number tripartite.
+ (MINGW_AC_MAKE_NO_PRINT_DIRECTORY): Use this new makeopts.m4 macro.
+ (MINGW_AC_PROG_LEX): Use it, in place of...
+ (AC_PROG_LEX): ...this.
+
+ * Makefile.in (MAKE): New macro; assign using autoconf's SET_MAKE.
+ (QUIET_MAKE): New macro; derive it from $(MAKE) --no-print-directory.
+ (LEX_COMMAND, LEX_COMMAND_ABORT): New macros; define them.
+ (LEX_MISSING, LEX_MISSING_MESSAGE, LEX_OUTPUT): Likewise.
+ (FORMAT_MESSAGE, MESSAGE_FOLD_WIDTH): Likewise; implemented from...
+ (AWK_CLEAR_LINE_BUFFER, AWK_FLUSH_BUFFER, AWK_PRINT_AND_CLEAR_BUFFER):
+ (AWK_COLLECT_MESSAGE, AWK_COLLECT_BLANK_LINE, AWK_PRINT_LINE_BUFFER):
+ ...this collection of internal helper macros; define them.
+ (%.c: %.l): Replacement for built-in rule; it handles "missing lex" in
+ a manner consistent with expectations of autoconf's AC_PROG_LEX.
+ (execute-command): New phoney build goal; it is used with...
+ (WITH_REQUEST): ...this new macro, to invoke commands recursively.
+
+2013-03-25 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Adapt DMH for use in setup tool.
+
+ * src/dmh.cpp: File renamed to...
+ * src/dmhcore.cpp: ...this; some code rearranged, to facilitate...
+ [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: ...marking of code
+ sections which are required in the base package build, but which may
+ be filtered out of the build context for the setup tool.
+
+ * src/guidmh.cpp: File renamed to this...
+ * src/dmhguix.cpp: ...this; also add marking for...
+ [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: ...sections which
+ may be filtered out of the build context for the setup tool.
+ (dmhTypePTY::printf): Improve stratagem for output.
+
+ * Makefile.in (CORE_DLL_OBJECTS, GUIMAIN_OBJECTS): Adjust references
+ to renamed source files.
+
+2013-03-22 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Enable context hooks for build time code filtering.
+
+ * src/pkgimpl.h: New file; it defines...
+ (PACKAGE_BASE_COMPONENT, SETUP_TOOL_COMPONENT): ...these contexts;
+ either of these may be selected, by defining as manifest value for...
+ (IMPLEMENTATION_LEVEL): ...this; default is PACKAGE_BASE_COMPONENT.
+
+ * src/pkgbase.h: Include pkgimpl.h
+ [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]: Occlude content.
+
2013-03-21 Keith Marshall <keithmarshall@users.sourceforge.net>
Specify additional files for clean-up.