+2013-09-04 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ mingw-get-0.6.0-mingw32-beta-20130904-1 released.
+
+ * srcdist-doc/NEWS.in srcdist-doc/README.in: Release notes updated.
+ * srcdist-doc/INSTALL.in: Installation instructions updated.
+ * All files (r0-6-0-beta-20130904-1): Tag assigned.
+
+2013-08-26 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement retry throttling for failed internet connections.
+
+ * src/pkginet.h (INTERNET_RETRY_ATTEMPTS): New macro; define it.
+ (INTERNET_RETRY_INTERVAL, INTERNET_DELAY_FACTOR): Likewise.
+
+ * src/pkginet.cpp (INTERNET_RETRY_REQUESTER): New typedef.
+ (pkgInternetAgent::connection_delay, pkgInternetAgent::delay_factor):
+ (pkgInternetAgent::retries, pkgInternetAgent::retry_interval): New
+ private member variables; declare them.
+ (pkgInternetAgent::OpenURL): Use them; they must be initialised by...
+ (pkgInternetAgent::SetRetryOptions): ...this new method; implement it.
+ (pkgActionItem::DownloadSingleArchive): Invoke it.
+ (pkgXmlDocument::SyncRepository): Likewise.
+
+2013-08-24 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Reassign default URL for download of setup tool components.
+
+ * aclocal.m4 (PACKAGE_DIST_DOMAIN, PACKAGE_DIST_DIR): New precious
+ variables; declare them as such, and assign default values by using...
+ (MINGW_AC_PACKAGE_DIST_URL): ...this new macro; implement it.
+
+ * configure.ac (MINGW_AC_PACKAGE_DIST_URL): Use it.
+ * Makefile.in (TAG_SCRIPT): Capture assigned URL; substitute it...
+ (PACKAGE_DIST_URL): ...for this replacement text marker...
+ * src/setup.rc (ID_DOWNLOAD_HOST_URI): ...here.
+
+2013-08-21 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Simplify guimain.exe duplicate instance prevention.
+
+ * src/guimain.cpp (WinMain): Delegate requisite checking to...
+ (WTK::RaiseAppWindow): ...this external toolkit function.
+
+2013-08-13 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Install licence as standard setup component.
+
+ * src/guimain.h src/setup.rc (ID_PACKAGE_GUI_DISTNAME): Macro
+ no longer required; delete definition.
+
+ * src/setup.cpp (pkgSetup::DoFirstTimeInstallation):
+ <pkgSetupAction> [ID_PACKAGE_GUI_DISTNAME]: Delete reference.
+ <pkgSetupAction> [ID_PACKAGE_BASE_DISTNAME]: Update reference; repeat
+ to explicitly address each of "bin", "gui", and "lic" components.
+
+ * Makefile.in (TAG_SCRIPT) [PACKAGE_GUI_DISTNAME]: Delete reference.
+ (TAG_SCRIPT) [PACKAGE_BASE_DISTNAME]: Redefine as template.
+
+2013-08-13 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ More dialogue box adjustments.
+
+ * src/guimain.rc: Generally clean up white-space distribution.
+ (All dialogue templates): Use WS_TABSTOP consistently.
+
+2013-08-13 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Circumvent Windows-7 "Program Compatibility Assistant" misbehaviour.
+
+ * src/manifest.rc (assembly) <compatibility>: Add <supportedOS>
+ declarations for each of Vista, Win7, and (tentatively) Win8.
+
+2013-07-30 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Minor modification to "about" dialogue dismissal button.
+
+ * src/guimain.rc (IDD_HELP_ABOUT) <DEFPUSHBUTTON>: Change label text
+ to "Dismiss"; add WS_TABSTOP style.
+
+2013-07-30 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Match "about" dialogue caption to main window.
+
+ * src/guimain.rc (IDM_HELP_ABOUT) <MENUITEM>: Match it to...
+ (IDD_HELP_ABOUT) <CAPTION>: ...this; make it representative of...
+ (ID_MAIN_WINDOW_CAPTION): ...this.
+
+2013-07-30 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement "icon legend" display as "help" menu item.
+
+ * src/guimain.rc (IDM_HELP_LEGEND): Make menu item active; define
+ template for the dialogue box which it is to call out.
+
+ * src/guiexec.cpp (AppWindowMaker::OnCommand) [IDM_HELP_LEGEND]: New
+ case handler; implement dialogue box call out, as a variation on...
+ [IDM_HELP_ABOUT]: ...this; modify it accordingly.
+
+2013-07-30 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Avoid discarding pending changes when catalogue is updated.
+
+ * src/guimain.h (IDD_CONFIRMATION): New manifest constant; define it.
+ (AppWindowMaker::ConfirmActionDialogue): New static method; declare it.
+ (AppWindowMaker::ConfirmActionRequest): New method; declare it.
+
+ * src/guimain.rc (IDD_CONFIRMATION): Implement new dialogue template.
+
+ * src/guiexec.cpp (pkgConfirmAction, pkgConfirmActionClient): New
+ static variables; they are used as pseudo-arguments, together with...
+ (DIALOGUE_DISPATCH, DIALOGUE_RESPONSE, DIALOGUE_CHKSTATE): ...these
+ new macros; define them; they facilitate the implementation of...
+ (AppWindowMaker::ConfirmActionDialogue): ...this; implement it.
+ (AppWindowMaker::ConfirmActionRequest): Implement it; use it...
+ (AppWindowMaker::OnCommand) [IDM_REPO_UPDATE]: ...here, and...
+
+ * src/pkgdata.cpp (AppWindowMaker::OnClose): ...here.
+
+2013-07-26 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Make a minor GUI layout adjustment.
+
+ * src/pkgview.cpp (VSASH_INIT_POS): Increment from 0.30 to 0.35; this
+ sets the initial height of the package list pane to be 35% of the main
+ window height, which, at the default initial window size, neatly fits
+ the entire "Basic Setup" package group, without scrolling, on my
+ 1366x768 pixel Win7-VM display.
+
+2013-07-25 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement setup tool installer "plugin".
+
+ * src/setup.h (SETUP_HOOK_RUN_INSTALLER): Define request code.
+
+ * src/dllhook.cpp (run_basic_system_installer): Implement handler...
+ (setup_hook) [SETUP_HOOK_RUN_INSTALLER]: ...and invoke it.
+ (setup_hook) [default]: Collect diagnostics in common message digest.
+ (AppWindowMaker::SetupHookInvoked): Define and initialise it; in this
+ context, which does not conflict with prior definition in guimain.exe,
+ it must always remain true.
+
+ * src/setup.cpp (SetupTool) [constructor]: Invoke...
+ (SetupTool::DispatchSetupHookRequest): ...this, on user's request...
+ (SETUP_HOOK_RUN_INSTALLER): ...with this action code; this replaces...
+ (SetupTool::RunInstalledProgram): ...one reference instance for this
+ external program fork, leaving only one such reference remaining;
+ declare it to be "inline".
+
+ * Makefile.in (GUIMAIN_LIB_OBJECTS): New macro; define it. It
+ abstracts a subset of the object modules originally enumerated...
+ (GUIMAIN_OBJECTS): ...here, whence use it; also incorporate into...
+ (SETUP_DLL_OBJECTS): ...this.
+ (SETUP_DLL_LIBS): Make it equivalent to...
+ (GUIMAIN_LIBS): ...this.
+ (mingw-get-setup-0.dll): Use...
+ (GUI_LDFLAGS): ...this, to specify linking options, rather than...
+ (LDFLAGS): ...this.
+
+2013-07-25 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Add "Basic Setup" as a built-in standard package group.
+
+ * src/guimain.h (AppWindowMaker::SetupToolInvoked): New private
+ static member variable; declare it.
+
+ * src/guimain.cpp (AppWindowMaker::SetupToolInvoked): Define and
+ initialise it; this instance is specific to guimain.exe, where it
+ must always remain false.
+
+ * src/pkgtree.cpp (PKG_AFFILIATE_ALL): New constant; define it.
+ (load_package_group_hierarchy): Use it to specify those groups which
+ have all packages as affiliates, rather than just first root group.
+ (group_attributes): New static inline function; implement it, then...
+ (is_affiliated) [PKG_AFFILIATE_ALL]: ...use it to identify groups
+ which are specified as having all packages as affiliates.
+ (AppWindowMaker::InitPackageTreeView): Construct a temporary XML
+ specification for the "Basic Setup" package group, thence add it to
+ the package tree view; mark it as default group selection when...
+ [AppWindowMaker::SetupToolInvoked]: ...this is true.
+
+2013-07-14 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Implement GUI filtering of package list by group selection.
+
+ * src/pkgbase.h (pkgXmlNode::IsVisibleGroupMember):
+ (pkgXmlNode::IsVisibleClass): New inline methods; declare them.
+ (pkgXmlNode::MapPackageGroupHierarchy): New inline method; declare it.
+ (pkgXmlNode::SetPackageGroupHierarchyMapper): Likewise; it sets up...
+ (pkgXmlNode::PackageGroupHierarchyMapper): ...this new private static
+ function pointer; declare it as a function reference, in terms of...
+ (pkgXmlNode::GroupHierarchyMapper): ...this new typedef; define it.
+
+ * src/guimain.h (AppWindowMaker::PackageTreeView): Make it static.
+ (AppWindowMaker::IsPackageGroupAffiliate): Declare new static method.
+
+ * src/pkgbind.cpp (pkgRepository::GetPackageList): Make it invoke...
+ (pkgXmlNode::MapPackageGroupHierarchy): ...this; implement it.
+
+ * src/pkglist.cpp (pkgXmlNode::IsVisibleGroupMember): Implement it.
+ (pkgXmlNode::IsVisibleClass): Likewise; just provide a stub, for now.
+ (pkgListViewMaker::Dispatch): Use them to filter package list content.
+ (AppWindowMaker::UpdatePackageList): Redraw main window when done.
+
+ * src/pkgtree.cpp [_WIN32_IE >= 0x0400]: Require this.
+ (AppWindowMaker::PackageTreeView): Define and initialise it.
+ (AppWindowMaker::InitPackageTreeView): Extend implementation; use...
+ (map_package_group_hierarchy_recursive, load package_group_hierarchy):
+ (is_existing_group, map_package_group_hierarchy): ...these; implement
+ them locally, as file scoped static helper functions.
+ (select_key): New static local string constant; define it.
+ (pkgInitCategoryTreeGraft): Use it; also have it invoke...
+ (pkgXmlNode::SetPackageGroupHierarchyMapper): ...this; implement it.
+ (AppWindowMaker::IsPackageGroupAffiliate): Implement it; it uses...
+ (is_affiliated, is_child_affiliate): ...these helpers; provide them as
+ locally implemented, file scoped static functions.
+
+ * src/pkgdata.cpp (AppWindowMaker::OnNotify): Add handler for...
+ [ID_PACKAGE_TREEVIEW && TVN_SELCHANGED]: ...this notification.
+
+2013-07-12 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Correct a static string buffer aliasing issue.
+
+ * src/setup.cpp (SetupTool::setup_dll): New inline method; it ensures
+ that the buffer within approot_path() refers to the setup helper DLL.
+ (SetupTool::InitialiseSetupHookAPI): Use it, when loading the DLL.
+ (SetupTool::SetupTool): Use it again, when subsequently calling...
+ (_wunlink): ...this; it is now the preferred API, replacing...
+ (DeleteFileW): ...this; do not blindly assume that...
+ (SetupTool::dll_name): ...this remains unchanged between references;
+ it is an alias for the static buffer within approot_path().
+
+2013-07-12 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Add a custom profile for use by the setup tool.
+
+ * xml/setup.xml: New file.
+
+2013-07-03 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Improve handling of workspace clean-up requests.
+
+ * Makefile.in (mostlyclean): New rule; it replaces...
+ (clean): ...original intent delegated to 'mostlyclean'; retained and
+ augmented to remove all content specified by 'mostlyclean', plus...
+ (version.c, verinfo.h): ...these additional generated files.
+ (distclean): Modified; 'version.c' now removed by 'clean'.
+
+2013-07-03 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Correct an omission from the source code distribution.
+
+ * Makefile.in (BUILD_AUX_FILES): Add makeopts.m4; this was omitted
+ from the 2013-04-10 modification to fix MinGW-Bug #1601.
+
+2013-07-03 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Incorporate foundation for setup tool implementation.
+
+ * src/setup.cpp: New file; it implements the setup program.
+ * src/setup.rc: New file; it implements setup program resources.
+
+ * src/dllhook.cpp: New file; it implements a DLL bridging API to
+ facilitate invocation of mingw-get-0.dll functions from the setup
+ program, after both DLLs have been explicitly loaded at run time.
+
+ * src/setup.h: New file; it declares the interface between the
+ setup program and the preceding mingw-get bridging DLL.
+
+ * src/guimain.h: Add filter to exclude declarations specific to...
+ [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: ...this case, when
+ included by compilation units specific to the setup tool components.
+ (ID_MAIN_DIALOGUE_CAPTION, ID_DOWNLOAD_HOST_URI): New resource IDs.
+ (ID_PACKAGE_BASE_DISTNAME, ID_PACKAGE_DATA_DISTNAME): Likewise.
+ (ID_PACKAGE_GUI_DISTNAME): Likewise; define them.
+
+ * Makefile.in (all): Respecify it, in terms of...
+ (all-core, all-setup): ...these new rules; define them, and also...
+ (all-setup-exe, all-setup-dll): ...these, to force building of...
+ (mingw-get-setup.$EXEEXT, mingw-get-setup-0.dll): ...these binaries.
+ (setup.res.$OBJEXT): Specify prerequisites, as for guimain.res.$OBJEXT
+ (SETUP_TOOL_OBJECTS, SETUP_TOOL_LIBS): New macros; define them.
+ (SETUP_DLL_OBJECTS, SETUP_DLL_LIBS, SETUP_DISTNAME): Likewise.
+ (TAG_SCRIPT): Add resource script substitution definitions for...
+ (ID_PACKAGE_BASE_DISTNAME, ID_PACKAGE_DATA_DISTNAME): ...these...
+ (ID_PACKAGE_GUI_DISTNAME): ...and this.
+
2013-07-01 Keith Marshall <keithmarshall@users.sourceforge.net>
Add subprocess argument vector construction helpers.