OSDN Git Service

Implement some additional permanent debugging support.
[mingw/mingw-get.git] / ChangeLog
1 2012-12-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
2
3         Implement some additional permanent debugging support.
4
5         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies):
6         [DEBUG_TRACE_DEPENDENCIES]: Enable DMH digest mode for messages.
7
8         * src/tarproc.cpp (pkgTarArchiveInstaller::ProcessDataStream):
9         [DEBUG_TRACE_TRANSACTIONS]: Add logging of installed file path names.
10
11 2012-12-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
12
13         Insert a missing snprintf format effector.
14
15         * src/pkgnget.cpp (pkgDownloadMeterGUI::Update): Add omitted '%'
16         format specifier, in "%%", for formatting percentage-complete value.
17         Rename "size_buf" automatic variable as "buf"; this results in shorter
18         source lines, and consequently a tidier source code layout.
19         (pkgDownloadMeterGUI::ResetGUI): Likewise s/size_buf/buf/
20
21 2012-12-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
22
23         Add a missing header reference.
24
25         * src/approot.h: Include stdint.h; this ensures that wchar_t is
26         properly typedef'd, before attempting to use it.
27
28 2012-12-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
29
30         Make a clone of the package menu available as a pop-up.
31
32         * src/guimain.h (AppWindowMaker::SelectPackageAction): New private
33         method; declare it.
34
35         * src/pkgdata.cpp (AppWindowMaker::SelectPackageAction): Implement it.
36         (AppWindowMaker::OnNotify) [ID_PACKAGE_LISTVIEW]: Use it.
37
38 2012-12-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
39
40         Improve conditionally enabled state manipulation for menu items.
41
42         * src/guidata.rc (IDM_REPO_APPLY): Set its initial state as GRAYED.
43
44         * src/pkgdata.cpp (AppWindowMaker::UpdatePackageMenuBindings):
45         [IDM_PACKAGE_REINSTALL]: Always leave it GRAYED; this is a temporary
46         provision, until the GUI is updated to support "reinstall" capability.
47         [IDM_REPO_APPLY && !(EnumeratePendingActions > 0)]: Make it GRAYED.
48         [IDM_REPO_APPLY && (EnumeratePendingActions > 0)]: Enable it.
49
50 2012-12-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
51
52         Implement GUI bindings for processing a schedule of actions.
53
54         * src/guimain.h (IDD_DMH_CONSOLE): New resource ID; define it.
55         (IDD_APPLY_EXECUTE): New dialogue template resource ID; define it.
56         (AppWindowMaker::ExecuteScheduledActions): New method; declare it.
57
58         * src/guidata.rc (IDD_APPLY_EXECUTE): Implement dialogue template.
59
60         * src/guixmld.cpp (pkgApplyChanges): New thread function; implement it.
61         (AppWindowMaker::OnCommand) [IDD_REPO_APPLY]: Use it; it is invoked...
62         (IDD_APPLY_EXECUTE): ...via this dialogue box, subsequently calling...
63         (AppWindowMaker::ExecuteScheduledActions): ...this; implement it.
64
65         * src/pkgexec.cpp (pkgActionItem::Execute): Add argument; use it.
66         (pkgActionItem::~pkgActionItem): Unlink chained references.
67
68         * src/pkgbase.h (pkgActionItem::Execute): Adjust prototype.
69
70 2012-12-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
71
72         Do not preserve unnecessary download requests.
73
74         * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles):
75         [(flags & ACTION_INSTALL) != ACTION_INSTALL]: Actions having no
76         "install" effect do not require a download; cancel any associated
77         download request.
78
79 2012-12-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
80
81         Implement GUI bindings for package download agent.
82
83         * src/guimain.h (IDD_PROGRESS_VAL, IDD_PROGRESS_MAX):
84         (IDD_PROGRESS_PCT): New manifest resource IDs; define them.  They will
85         be used to identify dialogue controls, to be associated with...
86         (IDD_APPLY_DOWNLOAD): ...this new dialogue template ID; define it.
87         (AppWindowMaker::DownloadArchiveFiles): New inline method; declare it.
88
89         * src/guidata.rc (IDD_APPLY_DOWNLOAD): Implement dialogue template.
90
91         * src/pkgbase.h (pkgActionItem::DownloadArchiveFiles): New public
92         inline method; declare it.  It overloads an existing private method of
93         the same name, which it subsequently invokes.
94
95         * src/pkginet.h: New header file; it declares...
96         (pkgInvokeDownload): ...this new extern "C" function prototype, and...
97         (pkgDownloadMeter): ...this abstract class; it is factored from its
98         original implementation in pkginet.cpp, augmented by addition of...
99         (pkgDownloadMeter::primary): New static member variable; declare it.
100         (pkgDownloadMeter::UseGUI): New public method; implement it inline.
101         (pkgDownloadMeter::ResetGUI): New public method; declare it, providing
102         a do-nothing inline default implementation.  Any derived class, which
103         supports GUI capability, should override this.
104
105         * src/pkgnget.cpp: New file; it implements...
106         (pkgDownloadMeterGUI): New class, derived from pkgDownloadMeter.
107         (pkgActionItem::DownloadArchiveFiles): New overloaded inline method.
108         (AppWindowMaker::DownloadArchiveFiles): New inline method.
109         (pkgInvokeDownload): New dialogue box worker thread handler.
110
111         * src/pkginet.cpp: Include pkginet.h; hence...
112         (pkgDownloadMeter): ...remove redundant class declaration.
113         (pkgDownloadMeter::primary): Define and initialise it.
114         (pkgInternetStreamingAgent::Get) [pkgDownloadMeter::UseGUI]: Delegate
115         progress metering to referenced pkgDownloadMeterGUI class instance.
116         [! pkgDownloadMeter::UseGUI]: Continue to use the existing built-in
117         pkgDownloadMeterTTY mechanism.
118         (pkgActionItem::DownloadSingleArchive) [ACTION_DOWLOAD_FAILED]: Assert
119         this initially; subsequently clear it on successful completion.
120         (pkgActionItem::DownloadArchiveFiles): Collect diagnostic messages
121         into a single DMH_BEGIN_DIGEST ... DMH_END_DIGEST group.
122
123         * src/guixmld.cpp: Include pkginet.h; it is required by...
124         (AppWindowMaker::OnCommand) [IDD_REPO_APPLY]: Use pkgInvokeDownload.
125
126         * Makefile.in (GUIMAIN_OBJECTS): Include pkgnget.$OBJEXT
127
128 2012-12-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
129
130         Implement "Discard" handler for GUI "Apply Changes" dialogue.
131
132         * src/pkgbase.h (pkgActionItem::Reset): New public method; declare it.
133         (pkgActionItem::Clear): New public method; declare two overloaded
134         variants, of which implement one inline.
135         (pkgXmlDocument::ClearScheduledActions): New public method; declare
136         and implement it inline.
137
138         * src/pkgtask.h (ACTION_DOWNLOAD_FAILED, ACTION_APPLY_FAILED): New
139         manifest bit-flag constants; define them.  They provide a mechanism
140         for blocking the discard event in respect of failed actions.
141
142         * src/guixmld.cpp (pkgActionItem::Reset): Implement it.
143         (pkgActionItem::Clear): Implement second, out-of-line variant.
144         (ACTION_PRESERVE_FAILED): New local manifest bit-flag constant; define
145         it as an aggregate of ACTION_DOWNLOAD_FAILED and ACTION_APPLY_FAILED.
146         (AppWindowMaker::OnCommand) [IDD_REPO_APPLY]: Use them.
147
148 2012-12-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
149
150         Implement GUI dialogue for "Apply Changes" action approval.
151
152         * src/guidata.rc (ID_MAIN_WINDOW_MENU): Rename...
153         ("&Repository"): ...this drop-down menu entry...
154         ("&Installation"): ...this; add...
155         ("&Apply Changes"): ...this new selection.
156         (IDD_APPLY_APPROVE): New dialogue box resource template; define it.
157         (SS_CTEXTBOX): New aggregate style convenience macro; define it.
158         (ES_VT100): Likewise.
159
160         * src/guimain.h (IDM_REPO_APPLY): New resource ID; define it.
161         (IDM_REPO_QUIT): Redefined resource ID; was 302; changed to 312.
162         (IDD_APPLY_APPROVE, IDD_PROGRESS_TXT): New resource IDs; define them.
163         (IDD_APPLY_REMOVES_PACKAGES, IDD_APPLY_REMOVES_SUMMARY): Likewise.
164         (IDD_APPLY_INSTALLS_PACKAGES, IDD_APPLY_INSTALLS_SUMMARY): Likewise.
165         (IDD_APPLY_UPGRADES_PACKAGES, IDD_APPLY_UPGRADES_SUMMARY): Likewise.
166         (ID_APPLY, ID_DISCARD, ID_DEFER): New response IDs; define them.
167         (AppWindowMaker::EnumerateActions): New inline method; declare it.
168         (AppWindowMaker::DialogueResponse): New inline method; declare and
169         implement it.
170
171         * src/guixmld.cpp (pkglist.h): #included.
172         (dmh_setpty): Add locally declared prototype.
173         (AppWindowMaker::EnumerateActions): Implement it.
174         (pkgActionCount): New static helper function; implement it.
175         (ACTION_APPLY, APPLIES_TO): New macros; define them.
176         (FMT_APPLY_REMOVES, FMT_APPLY_INSTALLS, FMT_APPLY_UPGRADES): New
177         manifest string constants; define them.
178         (pkgApplyApproved): New static call-back function; implement...
179         (AppWindowMaker::OnCommand) [IDM_REPO_APPLY]: ...and use it.
180
181 2012-12-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
182
183         Implement enhanced action item enumeration capability.
184
185         * src/pkgbase.h (pkgActionItem::EnumeratePendingActions): New public
186         method; declare it.  It provides the capability to enumerate scheduled
187         actions, filtered by action classification; when invoked such that it
188         selects all actions, it may be used as a replacement for...
189         (pkgActionItem::Unapplied): ...this; delete declaration.
190
191         * src/pkgdata.cpp (pkgActionItem::EnumeratePendingActions): Implement
192         it; it is derived, with enhancement, from original implementation...
193         (pkgActionItem::Unapplied): ...of this; delete it, and...
194         (AppWindowMaker::OnClose): ...update calling reference accordingly.
195
196 2012-12-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
197
198         Implement PTY display emulation for GUI mode DMH.
199
200         * src/dmhcore.h (dmhTypeGeneric::set_console_hook): New public virtual
201         method; declare it, providing inline default do-nothing implementation.
202         (dmhTypeGeneric::severity_tag): New protected static method; declare it.
203         (dmhTypeGeneric::notification_format): New protected static property;
204         declare it.
205
206         * src/dmh.cpp (dmhTypeGeneric::severity_tag): Implement it.
207         (dmhTypeGeneric::notification_format): Define and initialise it.
208         (dmhTypeTTY::notify): Use them.
209         (dmh_setpty): New function; declare prototype and implement it.
210
211         * src/guidmh.cpp (dmhTypePTY): New locally implemented class.
212         (dmhTypeGUI::set_console_hook): New virtual method; declare and
213         implement it; it stores a dmhTypePTY reference pointer into...
214         (dmhTypeGUI::console_hook): ...this new private member variable.
215         (dmhTypeGUI::dmhTypeGUI): Initialise it.
216         (dmhTypeGUI::notify) [console_hook != NULL]: Delegate to it.
217         (dmhTypeGUI::printf) [console_hook != NULL]: Likewise.
218
219 2012-12-03  Keith Marshall  <keithmarshall@users.sourceforge.net>
220
221         Implement generalised API for dialogue boxes with worker threads.
222
223         * src/guimain.h (pkgDialogueThread): New typedef; declare it.
224         (AppWindowMaker::DialogueThread): New static property; declare it.
225         (AppWindowMaker::DispatchDialogueThread): New method; declare it.
226
227         * src/guixmld.cpp: Formatting of several comments adjusted.
228         (pkgUpdate, pkgInitDataLoad): Defunct functions; replaced by...
229         (pkgDialogue): ...this new static call-back function; implement it.
230         (AppWindowMaker::DialogueThread): Instantiate and initialise it.
231         (AppWindowMaker::DispatchDialogueThread): Implement it.
232         (AppWindowMaker::Invoked): Use it to invoke pkgInvokeInitDataLoad()...
233         (AppWindowMaker::OnCommand): ...and pkgInvokeUpdate().
234
235 2012-12-03  Keith Marshall  <keithmarshall@users.sourceforge.net>
236
237         Consolidate GUI implementation for package list view management.
238
239         * src/pkglist.h (pkgListViewMaker::GetTitle): Disused overloaded
240         method; remove all declarations.
241         (pkgListViewMaker::GetVersionString): Disused method; remove
242         declaration.
243         (pkgListViewMaker::GetItem): New private inline method; declare it.
244         (pkgListViewMaker::UpdateItem): New private method; declare it.
245         (pkgListViewMaker::UpdateListView): New public method; declare it.
246         (pkgListViewMaker::MarkScheduledActions): Likewise.
247
248         * src/guimain.h (AppWindowMaker::MarkSchedule): New public inline
249         method; declare it, but defer implementation to...
250
251         * src/pkgdata.cpp (AppWindowMaker::MarkSchedule): ...here; not used
252         elsewhere, it is derived from, and replaces...
253         (pkgMarkSchedule): ...this function; factor out redundant code, in
254         favour of delegation to pkgListViewMaker::MarkScheduledActions(), with
255         following call to AppWindowMaker::UpdatePackageMenuBindings(); update
256         calling function references...
257         (AppWindowMaker::UnmarkSelectedPackage): ...here, and...
258         (AppWindowMaker::Schedule): ...here.
259
260         * src/pkglist.cpp (pkgVersionString): New static function; implement
261         it as a local replacement for...
262         (pkgListViewMaker::GetVersionString): ...this defunct class method.
263         (pkgGetTitle): New overloaded static function; implement two variants,
264         as local replacements for...
265         (pkgListViewMaker::GetTitle): ...this defunct overloaded class method.
266         (pkgListViewMaker::UpdateItem): Implement it; factor code from...
267         (pkgListViewMaker::InsertItem): ...here, whence use it.
268         (pkgListViewMaker::MarkScheduledActions): Implement it.
269         (pkgListViewMaker::UpdateListView): Implement it.
270         (pkgListViewMaker::pkgListViewMaker): Remove references to...
271         (LVIF_TEXT): ...this.
272
273 2012-11-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
274
275         Increase width of window sash bars by 50%.
276
277         * src/guimain.h (SASH_BAR_THICKNESS): Increase from 4 to 6; this makes
278         it easier to grab the sash bars, so they may be dragged; IMO, it also
279         results in a better appearance.
280
281 2012-11-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
282
283         Maintain consistent internal vs. external installation records.
284
285         * src/pkginst.cpp (pkgInstall): Set "installed" attribute on internal
286         package reference, to "yes", after installation; CLI didn't need this,
287         but GUI will do so, for any package revisited in a single session.
288
289         * src/pkgunst.cpp (pkgRemove): Similarly, negate "installed" attribute
290         after package removal.
291
292 2012-11-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
293
294         Refactor to consolidate three instances of duplicate code.
295
296         * src/pkglist.h (pkgGetStatus): New function; declare it.
297         * src/pkglist.cpp (pkgGetStatus): Implement it; factor out from...
298         (pkgListViewMaker::InsertItem): ...here, whence use it.
299         * src/pkgdata.cpp (pkgMarkSchedule): Likewise here...
300         (DataSheetMaker::DisplayGeneralData): ...and here.
301
302 2012-11-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
303
304         Add GUI support for install, upgrade, and remove action scheduling.
305
306         * src/guimain.h (EXTERN_C): Ensure it is defined.
307         (pkgActionItem): Add forward declaration of class name.
308         (pkgMarkSchedule): New EXTERN_C function; declare and prototype it.
309         (AppWindowMaker::OnClose): New virtual method; declare it.
310         (AppWindowMaker::Schedule): New public method; declare it.
311         (AppWindowMaker::UnmarkSelectedPackage): Likewise.
312
313         * src/pkgbase.h (pkgActionItem::HasAttribute) [this == NULL]: Add
314         protective logic; ignore attempts to access non-existent objects.
315         (pkgActionItem::SelectPackage) [this == NULL]: Likewise.
316         (pkgActionItem::Selection) [this == NULL]: Likewise.
317         (pkgActionItem::GetReference): New overloaded public method; declare
318         prototype variant with argument type of pkgXmlNode*.
319         (pkgActionItem::Unapplied): New public method; declare it.
320         (pkgActionItem::CancelScheduledAction): Likewise.
321         (pkgXmlDocument::Schedule): Change return type from void to
322         pkgActionItem*; add default argument values.
323
324         * src/guixmld.cpp (AppWindowMaker::OnCommand): Add menu case hooks...
325         [IDM_PACKAGE_INSTALL]: ...to schedule package 'install' action...
326         [IDM_PACKAGE_UPGRADE]: ...package 'upgrade' action...
327         [IDM_PACKAGE_REMOVE]: ...package 'remove' action, or...
328         [IDM_PACKAGE_UNMARK]: ...to cancel any of these scheduling requests.
329         [IDM_REPO_QUIT]: Correct typo; s/WM_QUIT/WM_CLOSE/ in comment.
330
331         * src/pkgdata.cpp (pkgMarkSchedule): Implement it.
332         (pkgActionItem::CancelScheduledAction): Implement it.
333         (pkgActionItem::Unapplied): Implement it.
334         (AppWindowMaker::UpdatePackageMenuBindings): Improve comments.
335         (AppWindowMaker::UnmarkSelectedPackage): Implement it.
336         (AppWindowMaker::Schedule): Implement it.
337         (AppWindowMaker::OnClose): Implement it.
338
339         * src/pkgdeps.cpp (pkgActionItem::GetReference): Implement overload.
340         (pkgXmlDocument::Schedule): Change return type, and return value.
341         [this == NULL]: Add protective logic; ignore non-existent objects.
342         [name == NULL]: Do not schedule; just return existing action list.
343
344 2012-11-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
345
346         Add dynamically enabled state control for package menu items.
347
348         * src/guimain.h (AppWindowMaker::UpdatePackageMenuBindings): New
349         private method; declare it.
350
351         * src/pkgdata.cpp (AppWindowMaker::UpdatePackageMenuBindings):
352         Implement it, and...
353         (AppWindowMaker::OnNotify): ...use it.
354
355 2012-11-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
356
357         Avoid excessive inter-word spaces in adjusted text.
358
359         * src/pkgdata.cpp (pkgTroffLayoutEngine::WriteLn): Check extent of
360         padding to be added at each inter-word space, when adjusting text; do
361         not adjust, if it exceeds 5% of available display pane width.
362
363 2012-11-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
364
365         Elide unbreakable text which will not fit within display width.
366
367         * src/pkgdata.cpp (pkgTroffLayoutEngine::WriteLn): Add logic to detect
368         over-width unbreakable text; elide characters from the right, to make
369         it fit within the display width, with trailing ellipsis.
370
371 2012-11-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
372
373         Add content compiler for package data sheet "general" tab.
374
375         * src/pkgbase.h (pkgActionItem::PrintURI): Make it public.  Add a
376         call-back reference argument, for output function; assign puts() as
377         default, where previously had hard coded printf() emulating puts()
378
379         * src/pkginet.cpp (pkgActionItem::PrintURI): Use call-back hook.
380
381         * src/pkgdata.cpp (DataSheetMaker::Display): New static property; it
382         stores a reference to the active class instance, so static call-back
383         methods may delegate processing requests to non-static methods.
384         (DataSheetMaker::Advance): New static property; it is used to instruct
385         call-back methods to interpose paragraph leading it the output stream.
386         (DataSheetMaker::FormatRecord): New private method; implement it.
387         (DataSheetMaker::FormatText): Don't pass "canvas" as an argument; we
388         can access it directly as a class property.  Update all callers as
389         necessary, to conform to modified function prototype.
390         (pkgListSelection): New static function; implement it, and...
391         (DataSheetMaker::OnPaint): ...use it in switch cases, when calling...
392         [PKG_DATASHEET_GENERAL]: DataSheetMaker::DisplayGeneralData(), and...
393         [PKG_DATASHEET_DESCRIPTION]: DataSheetMaker::DisplayDescription().
394         (DataSheetMaker::DisplayGeneralData): New public method; implement it.
395         (DataSheetMaker::DisplayPackageURL): New static method; implement it.
396         (DataSheetMaker::DisplayLicenceURL): Likewise.
397         (DataSheetMaker::DisplaySourceURL): Likewise.
398
399 2012-10-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
400
401         Fix error in counting of catalogue files during loading.
402
403         * src/pkgbind.cpp (pkgRepository::GetPackageList): Increment count
404         variable once only, at start of each cycle of the catalogue loading
405         loop; previous strategy of counting in discrete logic paths could
406         miss several required increments, particularly in CLI mode.
407
408 2012-10-27  Keith Marshall  <keithmarshall@users.sourceforge.net>
409
410         Avoid DMH message digest fragmentation when downloading.
411
412         * src/dmh.h (DMH_GET_CONTROL_STATE): New macro; define it.
413         * src/pkginet.cpp (pkgInternetAgent::OpenURL): Use it; do not close
414         locally opened message digest, when called with one already open.
415
416 2012-10-27  Keith Marshall  <keithmarshall@users.sourceforge.net>
417
418         Initiate progress metering for catalogue load and update operations.
419
420         * src/guidata.rc (IDD_REPO_UPDATE): New dialogue template; define it.
421         (IDM_REPO_UPDATE): Enable selection from "Repository" drop-down menu.
422
423         * src/guimain.h (IDD_REPO_UPDATE, IDD_CLOSE_OPTIONS):
424         (IDD_AUTO_CLOSE_OPTION, IDD_PROGRESS_BAR, IDD_PROGRESS_MSG): New
425         resource identification manifest constants; define them.
426         (pkgXmlNode, pkgProgressMeter): Add forward class declarations.
427         (AppWindowMaker::AttachedProgressMeter): New private data; define...
428         (AppWindowMaker::AppWindowMaker): ...and initialise it.
429         (AppWindowMaker::AttachProgressMeter): New public method; declare it.
430         (AppWindowMaker::DetachProgressMeter): Likewise.
431         (AppWindowMaker::LoadPackageData, AppWindowMaker::ClearPackageList):
432         (AppWindowMaker::UpdatePackageList): Make them public.
433
434         * src/pkgbase.h (pkgProgressMeter): New abstract class; declare it.
435         (AppWindowMaker) [GUIMAIN_H undefined]: Add forward class declaration.
436         (pkgXmlDocument::progress_meter): New private data member; declare...
437         (pkgXmlDocument::pkgXmlDocument): ...and initialise it.
438         (pkgXmlDocument::ProgressMeter, pkgXmlDocument::AttachProgressMeter):
439         (pkgXmlDocument::DetachProgressMeter): New public inline methods;
440         implement them.
441
442         * src/pkgview.cpp (WTK::GenericDialogue): Delete disused reference.
443         (AppWindowMaker::OnCommand): Factor out implementation; relocate it...
444         * src/guixmld.cpp: ...to here; thus it may utilise dependants of...
445         (ProgressMeterMaker): ...this new locally implemented class.
446         (AppWindowMaker::AttachProgressMeter): Implement it.
447         (AppWindowMaker::AttachProgressMeter): Likewise.
448         (pkgProgressMeter::~pkgProgressMeter): Likewise.
449         (pkgUpdate, pkgInvokeUpdate): New static functions; implement them.
450         (AppWindowMaker::Invoked): Replace direct call to LoadPackageData by
451         an indirect invocation, via a progress metering dialogue box using...
452         (pkgInitDataLoad): ...this new static callback function, invoking...
453         (pkgInvokeInitDataLoad): ...this new static thread function, whence...
454         (AppWindowMaker::LoadPackageData): ...this; add hook-up call to...
455         (pkgXmlDocument::AttachProgressMeter): ...incorporate this.
456
457         * src/pkgbind.cpp (pkgRepository::total, pkgRepository::count): New
458         private static properties; declare and instantiate them; provide...
459         (pkgRepository::Reset, pkgRepository::IncrementTotal): ...new public
460         static methods to manipulate them; declare and implement them inline.
461         (pkgRepository::GetPackageList): Use them to manage updates to the
462         pkgProgressMeter class instance, if any, which has been bound to
463         the controlling pkgXmlDocument class instance, when invoking...
464         (pkgXmlXmlDocument::BindRepositories): ...this.
465
466 2012-10-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
467
468         Associate DMH message boxes with active dialogues.
469
470         * src/guidmh.cpp (last_active_popup): New static inline function.
471         (dmhTypeGUI::dispatch_message): Use it.
472
473 2012-10-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
474
475         Fix Diagnostic Message Handler initialisation logic.
476
477         * src/dmh.cpp (dmh_init) [DMH_SUBSYSTEM_GUI]: Correct a logic error;
478         it previously fell through after any successful initialisation of the
479         DMH_SUBSYSTEM_GUI handler, replacing it with a DMH_SUBSYSTEM_TTY type
480         handler.  Also, assign a heap copy of the passed "progname" string
481         resource, which is volatile, to ensure that the handler retains a
482         valid reference.
483
484 2012-10-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
485
486         Implement preliminary GUI mode data sheet compiler.
487
488         * src/guimain.h (DataSheetMaker): New class; forward declare it.
489         (AppWindowMaker::InitPackageTabControl): New private method; declare it.
490         (AppWindowMaker::DataSheet, AppWindowMaker::PackageTabControl):
491         (AppWindowMaker::TabDataPane, AppWindowMaker::PackageTabPane): New
492         private data members; declare them.
493         (ID_SASH_WINDOW_PANE_CLASS): New string resource identifier; define it.
494         (ID_PACKAGE_DATASHEET, ID_PACKAGE_TABPANE): New window identifiers;
495         define them.
496
497         * src/guidata.rc (ID_SASH_WINDOW_PANE_CLASS): Specify string resource.
498
499         * src/pkgview.cpp (AppWindowMaker::OnSize): Add handler for...
500         (ID_PACKAGE_TABPANE, ID_PACKAGE_TABCONTROL, ID_PACKAGE_DATASHHET):
501         ...this group of sash pane child window entities.
502         (AppWindowMaker::OnNotify): Comment out disused stub implementation.
503
504         * src/pkgshow.cpp (pkgUTF8Parser): Factor out class declaration...
505         (UTF32_MAX, UTF32_OVERFLOW, UTF32_INVALID): ...these definitions...
506         (utf32_t): ...and this typedef; relocate to, and #include...
507         * src/pkgdata.h: ...this new header file.
508
509         * src/pkgdata.cpp (DataSheetMaker): New class; declare and implement it.
510         (AppWindowMaker::InitPackageTabControl): Implement it.
511         (AppWindowMaker::OnNotify): Reimplement it.
512
513         * Makefile.in (GUIMAIN_OBJECTS): Add pkgdata.OBJEXT
514
515         * src/guixmld.cpp (AppWindowMaker::Invoked): Add call to invoke
516         AppWindowMaker::InitPackageTabControl()
517
518 2012-10-09  Keith Marshall  <keithmarshall@users.sourceforge.net>
519
520         Remove a grossly heuristic list view hack.
521
522         * src/pkglist.cpp (pkgListViewMaker::GetTitle): Remove code for the
523         heuristic deletion of any redundant package name prefixes from package
524         title attributes; by now, all such prefixes should have been removed
525         from the catalogue, explicitly, at source.
526
527 2012-10-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
528
529         Implement GUI list view compiler for XML catalogue.
530
531         * src/pkgview.cpp (AppWindowMaker::LayoutEngine): Add case handler...
532         [pane_id == ID_PACKAGE_LISTVIEW]: ...for this window pane class.
533
534         * src/guimain.h (ID_PKGLIST_TABLE_HEADINGS):
535         (ID_PKGNAME_COLUMN_HEADING, ID_PKGTYPE_COLUMN_HEADING):
536         (ID_INSTVER_COLUMN_HEADING, ID_REPOVER_COLUMN_HEADING):
537         (ID_PKGDESC_COLUMN_HEADING): New resource identifiers; define them.
538         (ID_PKGSTATE_AVAILABLE, ID_PKGSTATE_AVAILABLE_NEW):
539         (ID_PKGSTATE_AVAILABLE_LOCKED, ID_PKGSTATE_AVAILABLE_INSTALL):
540         (ID_PKGSTATE_INSTALLED_CURRENT, ID_PKGSTATE_INSTALLED_LOCKED):
541         (ID_PKGSTATE_INSTALLED_OLD, ID_PKGSTATE_UPGRADE, ID_PKGSTATE_REMOVE):
542         (ID_PKGSTATE_REINSTALL, ID_PKGSTATE_DOWNGRADE, ID_PKGSTATE_BROKEN):
543         (ID_PKGSTATE_PURGE): New icon resource identifiers; define them.
544         (AppWindowMaker::InitPackageListView): New private method; declare it.
545         (AppWindowMaker::UpdatePackageList): New private method; declare it.
546         (AppWindowMaker::ClearPackageList): New private method; declare and
547         implement it inline.
548
549         * src/guidata.rc (ID_PKGSTATE_AVAILABLE, ID_PKGSTATE_AVAILABLE_NEW):
550         (ID_PKGSTATE_AVAILABLE_LOCKED, ID_PKGSTATE_AVAILABLE_INSTALL):
551         (ID_PKGSTATE_INSTALLED_CURRENT, ID_PKGSTATE_INSTALLED_LOCKED):
552         (ID_PKGSTATE_INSTALLED_OLD, ID_PKGSTATE_UPGRADE, ID_PKGSTATE_REMOVE):
553         (ID_PKGSTATE_REINSTALL, ID_PKGSTATE_DOWNGRADE, ID_PKGSTATE_BROKEN):
554         (ID_PKGSTATE_PURGE): New icon resources; implement them.
555
556         * icons/state01.ico icons/state02.ico icons/state03.ico:
557         * icons/state04.ico icons/state05.ico icons/state06.ico:
558         * icons/state07.ico icons/state08.ico icons/state09.ico:
559         * icons/state10.ico icons/state11.ico icons/state12.ico:
560         * icons/state13.ico: New files.  All are cloned from synaptic icons;
561         see src/guimain.rc for symbolic/functional reference names.
562
563         * src/pkglist.h [GUIMAIN_H defined] (pkgListViewMaker): New class;
564         declare it for use in modules which #include guimain.h
565
566         * src/pkglist.cpp: New file; it implements...
567         (pkgListViewMaker): ...this new class, and its clients...
568         (AppWindowMaker::InitPackageListView): New method.
569         (AppWindowMaker::UpdatePackageList): Likewise.
570
571         * Makefile.in (GUIMAIN_OBJECTS): Add pkglist.OBJEXT
572
573         * src/guixmld.cpp (AppWindowMaker::Invoke): Call InitCommonControls(),
574         as prerequisite to AppWindowMaker::InitPackageListView(); follow up by
575         calling AppWindowMaker::AdjustLayout().
576
577 2012-10-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
578
579         Add GUI initialiser hook for XML catalogue interface.
580
581         * src/guimain.h (AppWindowMaker::Invoke): New public method; declare
582         it; it overrides the generic WTK::MainWindowMaker::Invoke() method, so
583         providing the initialiser hook which will invoke this...
584         (AppWindowMaker::LoadPackageData): ...new private method; declare it.
585
586         * src/guixmld.cpp: New file.
587         (AppWindowMaker::Invoke): Implement it.
588         (AppWindowMaker::LoadPackageData): Likewise.
589
590         * Makefile.in (GUIMAIN_OBJECTS): Add guixmld.OBJEXT
591
592 2012-09-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
593
594         Add initial working GUI mode DMH class implementation.
595
596         * src/dmh.h (DMH_SEVERITY_MASK): New manifest constant; define it.
597         (DMH_DIGEST_MASK, DMH_COMPILE_DIGEST, DMH_DISPATCH_DIGEST): Likewise.
598         (DMH_BEGIN_DIGEST, DMH_END_DIGEST): Redefine in terms of above.
599
600         * src/dmhcore.h: New header file; it declares...
601         (dmhTypeGeneric): ...this abstract base class, factored from...
602
603         * src/dmh.cpp (dmhTypeGeneric): ...here, whence remove it; it is
604         still required, thus include dmhcore.h so that it remains visible.
605         (dmh_exception): Remove errant namespace qualifier from constructor.
606         (dmhTypeGUI): Delete class declaration and original constructor.
607         (dmh_init): Delete reference to dmhTypeGUI; replace by call to...
608         (dmh_init_gui): ...this new static function; it is a stub which
609         invokes a DLL import of the same name, to instantiate a dmhTypeGUI.
610         (dmhTypeGUI::control, dmhTypeGUI::notify, dmhTypeGUI::printf): Delete
611         original method stubs.
612
613         * src/guidmh.cpp: New file; it reimplements...
614         (dmhTypeGUI): ...this class; declare it and implement its constructor.
615         (dmh_init_gui): Provide its DLL exported implementation.
616         (dmhTypeGUI::dispatch_message): New private method; add it to the
617         class declaration and implement it; it is a helper method for...
618         (dmhTypeGUI::control, dmhTypeGUI::notify): ...these; implement them.
619         (dmhTypeGUI::printf): Provide a replacement stub.
620
621         * Makefile.in (GUIMAIN_OBJECTS): Add guidmh.OBJEXT
622
623         * src/guimain.h (AppWindowMaker::Create): New method; add it to the
624         class declaration; it overrides the default Create() method inherited
625         from WTK::MainWindowMaker
626
627         * src/pkgview.cpp (AppWindowMaker::Create): Implement it; it handles
628         window class registration and dmhTypeGUI initialisation, in addition
629         to the inherited CreateWindow() behaviour.
630
631         * src/guimain.cpp: Include dmh.h
632         (WinMain): Add catch block for dmh_exception.  Remove window class
633         registration request; it is now delegated to AppWindowMaker::Create()
634
635 2012-09-26  Keith Marshall  <keithmarshall@users.sourceforge.net>
636
637         Add .hgignore as tracked file.
638
639         * .hgignore: New file.
640
641 2012-09-25  Keith Marshall  <keithmarshall@users.sourceforge.net>
642
643         Defer generation of version.c until "make" time.
644
645         * version.c.in: Move it...
646         * src/version.c.in: ...to here.
647         (PACKAGE_NAME, PACKAGE_VERSION, COPYRIGHT_HOLDER, YEARS_OF_ISSUE):
648         Change substitution field marker character from "@" to "%".
649
650         * configure.ac (AC_CONFIG_FILES): Remove version.c
651
652         * Makefile.in (TAG_SCRIPT): New macro, factored out from...
653         (RC_SCRIPT): ...here, whence use it; also use it to implement...
654         (VERSION_SCRIPT): ...this further new macro; use it in...
655         (%.c): ...this generic template rule for version.c
656         (time-stamp, %.time, %.tagged.time, %.tag): New generic build
657         goals; use them to track package release progression via...
658         (build.tag): ...this new intermediate; make it a pre-requisite...
659         (guidata.OBJEXT, version.c): ...of these.
660
661 2012-09-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
662
663         Implement framework for GUI sash window layout controller.
664
665         * configure.ac (AC_INIT): Bump version number to 0.6
666         (CLI_RELEASE_CLASS): New AC_SUBST variable; default to "beta".
667         (GUI_RELEASE_CLASS): New AC_SUBST variable; default to "alpha".
668         (SNAPSHOT_CLASS): Recognise as user specified environent variable
669         override for both CLI_RELEASE_CLASS and GUI_RELEASE_CLASS.
670         (RC): New AC_CHECK_TOOL substitution variable name; it replaces...
671         (WINDRES): ...this, as reference name for the resource compiler.
672         (MINGW_AC_ASSERT_MISSING): Add AC_CHECK_HEADER traps for missing
673         "lua-dev" and "wtklite-dev" support.
674
675         * Makefile.in (CLI_RELEASE_CLASS, GUI_RELEASE_CLASS): Use them.
676         (BUILD_TAG, RC_SCRIPT, RC_INCLUDES): New macros; define and use...
677         (RC): ...with this, to implement new target rule for compiling...
678         (%.rc): ...resource definition files to %.OBJEXT objects.
679         (GUIMAIN_OBJECTS, GUIMAIN_LIBS): New macros; define and use...
680         (guimain.EXEEXT): ...to implement build rule for this.
681         (LIBEXEC_PROGRAMS): Add guimain.EXEEXT
682         (lastrites.EXEEXT): Use GUI_LDFLAGS.
683         
684         * src/guimain.h src/guimain.cpp src/guidata.rc: New files.
685         * src/pkgview.cpp: New file.
686
687 2012-09-20  Keith Marshall  <keithmarshall@users.sourceforge.net>
688
689         Adjust incorrectly resolved 2012-09-14 merge from master.
690
691         * src/Makefile.in: Restore lost reference to guistub.cpp
692
693 2012-09-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
694
695         Implement GUI hooks in "rites of passage" internal API.
696
697         * src/pkglock.h: New file; it adds the pkgLock() and pkgRelease()
698         inline wrapper functions, through which the GUI application acquires
699         and manages an exclusive access lock for the XML catalogue.
700
701         * src/rites.c (lockfile_name): Explicitly cast memory allocated for
702         the returned name to (char *), so this may be embedded in C++ code.
703         (pkgInitRites): Factor out lock acquisition failure diagnostics...
704         (pkgLockFail): ...to this inline helper function; conditionally...
705         [ifdef GUIMAIN_H]: ...provide one implementation for GUI use...
706         [ifndef GUIMAIN_H]: ...and an alternative for CLI use.
707
708 2012-09-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
709
710         Be case agnostic when matching shortcut targets.
711
712         * scripts/libexec/unlink.js [ref.TargetPath == chklink]: Apply
713         toLowerCase() on both sides of the comparison.
714
715 2012-09-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
716
717         Note relocation of m4 when packaging source distribution.
718
719         * Makefile.in (SRCDIST_SUBDIRS): Refer to build-aux/m4, not m4.
720
721 2012-09-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
722
723         Move guimain.cpp out of the way.
724
725         * src/guimain.cpp: Rename file as...
726         * src/guistub.cpp: ...this; we want to keep current features for now,
727         but to use the guimain.cpp name for main GUI application development.
728         * Makefile.in: Adjust references accordingly.
729
730 2012-09-09  Keith Marshall  <keithmarshall@users.sourceforge.net>
731
732         Fix typo, and update licensing terms for embedded getopt.c
733
734         * src/getopt.c: Incorporate MIT/X style licence; update copyright
735         notice, to reflect chronology of publication; correct degenerate RCS
736         keyword usage in EOF marker comment.
737
738 2012-09-03  Keith Marshall  <keithmarshall@users.sourceforge.net>
739
740         Correct omission from copyright notice.
741
742         * src/pkgkeys.c: Add year 2012, to reflect 2012-09-02 update.
743
744 2012-09-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
745
746         Redefine paragraph_key with project global scope.
747
748         * src/pkgkeys.h (paragraph_key): Declare it.
749         * src/pkgkeys.c (paragraph_key): Define it.
750
751         * src/pkgshow.cpp (pkgDirectoryViewer::EmitDescription): Delete
752         function local definition; use global definition instead.
753
754 2012-09-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
755
756         Correct defect introduced by 2012-08-03 commit.
757
758         * src/approot.c (AppPathNameW): Add omitted 'else', so that tail
759         pointer isn't moved after the APPROOT prefix is truncated.
760
761 2012-09-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
762
763         Remap Mercurial subrepository reference via local hg-git clone.
764
765         * .hgsub (build-aux): Point to ../build-aux; this must be a locally
766         hosted hg clone of the git origin repository, and it must pre-exist as
767         a sibling of any created hg clone of the mingw-get repository.
768
769         * .hgsubstate: New file, automatically generated by Mercurial.
770
771 2012-08-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
772
773         Add Mercurial subrepository reference for build-aux.
774
775         * .hgsub: New file.
776
777 2012-08-03  Keith Marshall  <keithmarshall@users.sourceforge.net>
778
779         More code refactoring, to facilitate GUI implementation.
780
781         * src/clistub.c (AppPathNameW): Factor out; relocate to...
782         * src/approot.c: ...this new file; it reproduces the original
783         implementation, modified to also consider any "libexec" directory in
784         the executable path as the first child of the APPROOT prefix.  Note
785         also, that no longer terminates APPROOT with a trailing backslash.
786
787         * src/approot.h: New file; it trivially declares the prototype for...
788         (AppPathNameW): ...this relocated extern "C" function.
789
790         * src/clistub.c (main): Adapt usage of AppPathNameW(), to reinstate
791         trailing backslash on assignment to APPROOT environment variable.
792
793         * Makefile.in (CLI_EXE_OBJECTS): New macro; define it as the original
794         set of prerequisites, with the addition of approot.OBJEXT, for...
795         (mingw-get.EXEEXT): ...this; use it.
796
797         * src/rites.c: Add comment regarding APPROOT usage.
798
799 2012-08-02  Earnie Boyd  <earnie@users.sourceforge.net>
800
801         Find missing.m4 in build-aux/m4 directory.
802
803         * aclocal.m4: Change path  m4/missing.m4 to build-aux/m4/missing.m4.
804
805 2012-07-31  Earnie Boyd  <earnie@users.sourceforge.net>
806
807         Add build-aux as a submodule.
808         Move .cvsignore to .gitignore.
809
810         * .gitmodules: New file.
811         * build-aux: New submodule directory.
812         * .cvsignore: Remove.
813         * .gitignore: New file.
814
815 2012-07-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
816
817         Disable globbing of command line arguments.
818
819         * src/clistub.c (_CRT_glob): Define and initialise to zero; we don't
820         need globbing, and it may cause case transliteration of case-sensitive
821         action keywords, when a file system entity with a case-insensitively
822         matching name exists.
823
824 2012-06-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
825
826         Refactor API to facilitate implementation of GUI ListView hooks.
827
828         * src/pkgkeys.h (title_key, description_key): Declare them.
829         * src/pkgkeys.c (title_key, description_key): Define them; relocate...
830         * src/pkgshow.cpp (pkgDirectoryViewer::EmitDescription): ...from here.
831         (pkgXmlDocument::CalalogueAllPackages): New public method; factor...
832         (pkgXmlDocument::DisplayPackageInfo): ...from here, whence use it.
833         (pkgDirectoryViewerEngine::EnumerateComponents): New private method;
834         implement as a concrete method of this abstract base class; factor...
835         (pkgDirectoryViewer::Dispatch): ...from original inline implementation
836         within this method of the concrete derived class, whence use it.
837         (pkgDirectoryViewerEngine, pkgDirectory): Factor class declarations...
838         * src/pkglist.h: ...into this new header file; include it.
839
840         * src/pkgbase.h (pkgDirectory): Add forward class declaration.
841         (pkgXmlDocument::CatalogueAllPackages): Declare it.
842
843 2012-05-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
844
845         Update help text to document package version selection capability.
846
847         * src/clistub.c (help_text): Add description of command line syntax
848         which may be used to specify an alternative to the default package
849         version selection, for install and upgrade actions.
850
851 2012-05-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
852
853         Support options set by preferences assigned within profile.xml
854
855         * xml/profile.xml (preferences): New element; add defaults.
856
857         * src/pkgopts.h (OPTION_ASSIGNED_FLAGS, OPTION_DESKTOP_ARGS):
858         (OPTION_START_MENU_ARGS): New enumerated constants; define them.
859         (OPTION_DESKTOP, OPTION_START_MENU): New manifest constants.
860         (OPTION_ASSIGNED, mark_option_as_set): New macros; define them.
861         (pkgOpts::GetValue, pkgOpts::GetString): Restrict look-up index to
862         least significant 12-bits of full-range index value.
863         (pkgOpts::IsSet): New inline method; implement it.
864
865         * src/clistub.c (main): Reimplement --desktop and --start-menu
866         options; each now becomes an OPTION_GENERIC optarg string store.
867         (set_script_hook): Function no longer used; delete it; delegate to...
868         * src/pkgbase.h (pkgXmlDocument::EstablishPreferences): ...this new
869         method; declare it, providing its implementation in...
870         * src/pkgopts.cpp: ...this new file; invoke it...
871         * src/climain.cpp (climain): ...here.
872
873         * Makefile.in (CORE_DLL_OBJECTS): Add pkgopts.$OBJEXT
874
875 2012-04-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
876
877         Correct sequence of installation/removal progress reporting.
878
879         * src/pkgunst.cpp (pkgRemove): Delay output of "removing package ..."
880         message, until after pre-remove hooks have run; this ensures that any
881         output from the pre-remove hook scripts appears in correct sequence.
882
883         * src/pkginst.cpp (pkgInstall): Likewise, for "installing package ..."
884         message, in relation to pre-install hooks.
885
886 2012-04-26  Keith Marshall  <keithmarshall@users.sourceforge.net>
887
888         mingw-get-0.5-beta-20120426-1 released.
889
890         * configure.ac (AC_INIT): Version number updated.
891         * srcdist-doc/NEWS.in: Updated; bug-fix notifications added.
892         * All files (r0-5-beta-20120426-1): Tag assigned.
893
894 2012-04-25  Keith Marshall  <keithmarshall@users.sourceforge.net>
895
896         Interim work-around for MinGW-Bug #3520864.
897
898         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies):
899         [DEBUG_TRACE_DEPENDENCIES]: Add request flags to messages reporting
900         the scheduling of installation activities.
901
902         * src/pkgexec.cpp (pkgXmlDocument::Schedule): Add temporary diagnostic
903         hooks to confirm request flags; bracket them with #if 0 ... #endif.
904         [ACTION_PRIMARY && pre-scheduled request]: Don't trash request flags
905         when updating the pre-existing action item data.
906
907 2012-04-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
908
909         Fix MinGW-Bug #3520488
910
911         * src/pkgexec.cpp (action_code): Check for, and reject NULL pointer
912         passed as action request string; also reject ambiguous abbreviations.
913
914         * src/climain.cpp (climain): Discriminate between NULL pointer and
915         other forms of invalid action keyword matching failures.
916
917 2012-04-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
918
919         mingw-get-0.5-beta-20120416-1 released.
920
921         * configure.ac (AC_INIT): Version number updated.
922         (YEARS_OF_ISSUE): 2012 added.
923
924         * srcdist-doc/NEWS.in: Updated; release notes added.
925         * All files (r0-5-beta-20120416-1): Tag assigned.
926
927 2012-04-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
928
929         Assign icon to temporary GUI executable file.
930
931         * icons/pkgicon.ico: New file, shamelessly copied from synaptic.
932
933         * configure.ac: Add identification for windres; propagate it to...
934         * Makefile.in: ...here; use it to compile object from icon files...
935         (srcdir/icons) [%.ico]: ...from this new vpath location.
936         (gui.exe): Link to compiled icon's object file.
937         (SRCDIST_SUBDIRS): Add icons directory.
938
939 2012-04-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
940
941         Ensure that package removal requests are correctly scheduled.
942
943         * src/pkgdeps.cpp (pkgXmlDocument::Schedule) [ACTION_REMOVE]: Schedule
944         as a distinct case, when the installed version is not the most recent
945         available release; consideration of this distinct case was previously
946         erroneously overlooked.
947
948 2012-04-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
949
950         Correct scheduling of new prerequisites when upgrading.
951
952         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies):
953         [ACTION_UPGRADE && ACTION_PRIMARY]: Don't exclude scheduling for this
954         case of a prerequisite with no previously installed version; it may be
955         a delegated primary requirement of a meta-package.
956
957 2012-04-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
958
959         Don't require subsystem within user specified version bounds.
960
961         * src/pkgdeps.cpp (pkgActionItem::ApplyBounds): Automatically consider
962         "*" wild-card matches for subsystem, if user doesn't specify it.
963
964 2012-04-09  Charles Wilson  <mingw@cwilson.fastmail.fm>
965
966         Fix missing include.
967
968         * src/pkgdeps.cpp (pkgopts.h): Include unconditionally; do not rely...
969         (debug.h) [DEBUG_TRACE_DYNAMIC]: ...on this, for indirect inclusion.
970
971 2012-04-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
972
973         Correct a srcdist package construction defect.
974
975         * Makefile.in (srcdist) [for SRCDIST_SUBDIRS]: Use...
976         (mkinstalldirs): ...this, to create package image directories.
977
978 2012-04-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
979
980         Add scripting hooks to support creation of MS-Windows shortcuts.
981
982         * src/clistub.c (progname): New static variable with file scope; it
983         replaces former automatic variable, of same name, in main() function.
984         (set_script_hook): New static function; implement it, and call it...
985         (main) [--desktop, --start-menu]: ...from here, to interpret these new
986         command line options; they are propagated to scripts via...
987         (MINGW_GET_DESKTOP_HOOK, MINGW_GET_START_MENU_HOOK): ...these new
988         internally assigned environment variables.
989         (help_text): Document --desktop and --start-menu.
990
991         * scripts/libexec/setup.lua scripts/libexec/wsh.lua: New lua module
992         files; they implement a lua scripting API; they delegate requests to
993         the Windows Scripting Host, via either of this pair of...
994         * scripts/libexec/shlink.js: ...new script to create shortcuts, or...
995         * scripts/libexec/unlink.js: ...its complement, to remove them.
996         * Makefile.in (SRCDIST_SUBDIRS): Integrate them; enumerate them in...
997         (scripts_srcdir, LIBEXEC_SCRIPTS): ...these new macros; use to...
998         (install): ...install them.
999
1000 2012-04-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
1001
1002         Initialise $LUA_PATH to locate mingw-get specific scripts.
1003
1004         * src/pkgexec.cpp (lua_path_init): New static inline function.
1005         (pkgXmlNode::DispatchScript): Call it on first time invocation, per...
1006         [lua_path_setup == false]: ...this static function local variable.
1007
1008 2012-04-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
1009
1010         Support installation of releases other than latest available.
1011
1012         * src/pkgbase.h (pkgActionItem::ApplyBounds): New method; declare it.
1013
1014         * src/pkgdeps.cpp (pkgActionItem::ApplyBounds): Implement it.
1015         (pkgXmlDocument::Schedule): Use it to interpret user specified version
1016         bounds, and apply them to scheduled action items.  Having used...
1017         (get_version_bounds): ...this new static inline function...
1018         ...to acquire any user specified version bounds, check that they can
1019         be honoured, before scheduling any action; delegate diagnostics to...
1020         (dmh_notify_no_match): ...this new local helper function, to report
1021         when they can't, and to indicate viable alternatives.
1022
1023 2012-03-26  Keith Marshall  <keithmarshall@users.sourceforge.net>
1024
1025         Rework previously inadequate solution for MinGW-Bug #3424406
1026
1027         * src/pkgtask.h: Update copyright notice for current year.
1028         (ACTION_MAY_SELECT): New manifest constant for use as flag; define it.
1029         * src/pkgexec.cpp (pkgActionItem::SelectIfMostRecentFit): Assign it.
1030
1031         * src/pkgdeps.cpp (STATIC_INLINE): New macro; define it.
1032         (ACTION_RECURSIVE_REINSTALL, ACTION_RECURSIVE_UPGRADE):
1033         (ACTION_RECURSIVE_REPLACE): New action code constants; define them.
1034         (with_flags): Original macro deleted; replace it with...
1035         (with_request_flags): ...this new static inline function.
1036         (if_noref, if_match, if_alias, with_download, promote): New static
1037         inline functions; they replace original macros of the same names.
1038         (is_recursive_action): Function no longer used; delete it.
1039         (action_class): New static inline function; implement and use it...
1040         (pkgXmlDocument::ResolveDependencies): ...here, to identify scheduling
1041         requirements for packages which are already installed; depends on...
1042         (request_mode): ...this new automatic variable; it augments and...
1043         (recursive_mode): ...replaces this one; rename it accordingly.
1044         (viable): Automatic variable no longer used; delete it.
1045         [DEBUG_REQUEST & DEBUG_TRACE_DEPENDENCIES]: Emit notification for
1046         scheduled installation.
1047         (pkgXmlDocument::Schedule): Add an implied...
1048         (ACTION_REMOVE): ...when scheduling a reinstallation.
1049
1050 2012-03-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
1051
1052         Address reinstallation issues per MinGW-Bugs #3416013 and #3424406
1053
1054         * src/pkgexec.cpp (reinstall_action_scheduled): New inline function.
1055         (pkgActionItem::Execute): Use it to identify cases where...
1056         [--reinstall]: ...implicit package removal is required, and also to
1057         facilitate improved progress reporting in such cases.
1058
1059         * src/pkgdeps.cpp (is_recursive_action): New inline function.
1060         (pkgXmlDocument::ResolveDependencies): Use it in tandem with...
1061         (recursive_mode): ...this new automatic variable, so as to handle...
1062         [meta-package dependency]: ...implicit recursion, to extend the scope
1063         of the current action to the first level of non-meta dependency.
1064         [install --reinstall]: ...reinstall original version of nominated
1065         package, ignoring any available upgrade; extend scope of operation...
1066         [install --reinstall --recursive]: ...to all prerequisite packages.
1067         [upgrade --reinstall]: ...upgrade nominated package if possible; if no
1068         upgrade available, reinstall current version; extend scope...
1069         [upgrade --reinstall --recursive]: ...to all prerequisites.
1070         (pkgXmlDocument::Schedule): Partially revert 2012-03-05 change;
1071         reimplement selectively; never promote...
1072         [install, install --reinstall]: ...these operations to become...
1073         [upgrade]: ...this, even if available; issue diagnostic instead.
1074
1075 2012-03-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1076
1077         Rationalise implementation and usage of --all-related option.
1078
1079         * src/pkgopts.h: Update copyright notice; add year 2012.
1080         (OPTION_RECURSIVE, OPTION_ALL_RELATED): New constants; define them.
1081         (pkgOpts::SetFlags): New method; declare and implement it inline.
1082
1083         * src/clistub.c: Update copyright notice; add year 2012.
1084         (options) [recursive, all-related]: Redefine in terms of...
1085         (OPTION_RECURSIVE, OPTION_ALL_RELATED): ...these.
1086         (help_text): Update appropriately.
1087
1088         * src/climain.cpp: Update copyright notice; add year 2012.
1089         (climain) [all-related]: Associate its use exclusively with...
1090         (source, licence): ...these package processing operations; use...
1091         (pkgOptions::SetFlags): ...this, to propagate its effect.
1092
1093 2012-03-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1094
1095         Don't report failed downloads in respect of virtual packages.
1096
1097         * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles): Clear...
1098         [ACTION_DOWNLOAD]: ...this status flag for any package identified as
1099         a meta-package; this corrects a further regression introduced with the
1100         2011-11-09 update, whereby pending download requests for such virtual
1101         packages were not cancelled, resulting in failure to install due to
1102         failed downloads, when no download is actually required.
1103
1104 2012-03-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
1105
1106         Don't suppress implied downloads for top-level actions.
1107
1108         * src/pkgdeps.cpp: Update copyright notice for new year.
1109         (pkgXmlDocument::Schedule) [!OPTION_PRINT_URIS]: Ensure that...
1110         [ACTION_DOWNLOAD]: ...this is enabled, when scheduling an install or
1111         an upgrade action for a package specified as a command line argument;
1112         this corrects a regression introduced on 2011-11-09, which resulted in
1113         ACTION_DOWNLOAD being enabled only for second tier dependent actions.
1114
1115 2012-02-20  Keith Marshall  <keithmarshall@users.sourceforge.net>
1116
1117         Copyright notice updates.
1118
1119         * Makefile.in: Add 2012 as year of republication.
1120         * src/pkgbase.h src/sysroot.cpp src/pkgexec.cpp: Likewise.
1121         * src/rites.c src/pkginst.cpp src/pkgunst.cpp: Likewise.
1122
1123 2012-02-20  Keith Marshall  <keithmarshall@users.sourceforge.net>
1124
1125         Fix ill-advised optimisation in $APPROOT environment lookup.
1126
1127         * src/rites.c (approot_path): Don't save result of getenv() lookup
1128         across calls; the environment may have been moved in the interim,
1129         making the original result invalid on any subsequent call.  Also,
1130         prefer MS-Windows style (with backslashes) for default.
1131         (pkgLastRites): Report full path name for lastrites.exe, on execl()
1132         failure, rather than only the path relative to $APPROOT.
1133
1134 2012-02-20  Keith Marshall  <keithmarshall@users.sourceforge.net>
1135
1136         Propagate sysroot path settings to scripts via the environment.
1137
1138         * src/pkgbase.h (PKG_PUTENV_FLAGS_MASK): New constant; it maps...
1139         (PKG_PUTENV_DIRSEP_MSW, PKG_PUTENV_DIRSEP_POSIX): ...these flags...
1140         (PKG_PUTENV_SCAN_VARNAME, PKG_PUTENV_NAME_TOUPPER): ...and these;
1141         they are used to specify optional behavioural choices for...
1142         (pkgPutEnv): ...this new function; declare it.
1143
1144         * src/sysroot.cpp (pkgPutEnv): Implement it.
1145         (pkgXmlDocument::LoadSystemMap): Use it to add $SUBSYSTEM_SYSROOT path
1146         specifications to the environment, for each named subsystem associated
1147         with the active system map.
1148
1149         * src/pkgexec.cpp (pkgActionItem::Execute): Invoke pkgPutEnv() prior
1150         to processing of each package install, upgrade, or remove action, so
1151         as to update environment variable $SYSROOT to represent the sysroot
1152         path for each package processed, during execution of script hooks.
1153
1154 2012-02-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
1155
1156         Implement hooks to support lua scripting interface.
1157
1158         * Makefile.in (LIBS): Add -llua.
1159
1160         * src/pkgbase.h (pkgXmlNode::InvokeScript): New method; declare it
1161         as private, and provide overloaded public inline API implementation.
1162         (pkgXmlNode::DispatchScript): New private method; declare it.
1163
1164         * src/pkgexec.cpp (pkgXmlNode::InvokeScript): Implement it.
1165         (pkgXmlNode::DispatchScript): Likewise; it directs InvokeScript to...
1166         (pkgInvokeScript): ...this new static function; implement it.
1167
1168         * src/pkginst.cpp (pkgInstall): Call InvokeScript as appropriate.
1169         * src/pkgunst.cpp (pkgRemove): Likewise.
1170
1171 2011-11-24  Keith Marshall  <keithmarshall@users.sourceforge.net>
1172
1173         Avoid implicit cast warnings; reported by Robert Hartmann.
1174
1175         * src/dmh.h (DMH_BEGIN_DIGEST): Explicitly cast to uint16_t.
1176         (DMH_END_DIGEST): Likewise.
1177
1178 2011-11-09  Keith Marshall  <keithmarshall@users.sourceforge.net>
1179
1180         Avoid unnecessary downloads for already installed packages.
1181
1182         * src/pkginet.cpp (pkgActionItem::DownloadSingleArchive): Require
1183         external scheduling of ACTION_DOWNLOAD; cancel the scheduled request
1184         on completion, or when not required due to pre-existing local copy.
1185
1186         * src/climain.cpp (pkgActionItem::GetSourceArchive): Must always be
1187         prepared to download the associated archive; enable ACTION_DOWNLOAD.
1188
1189         * src/pkgexec.cpp (pkgActionItem::Schedule) [OPTION_REINSTALL]:
1190         May need to download the archive, even when the requested package was
1191         previously installed; schedule ACTION_DOWNLOAD to enable this.
1192
1193         * src/pkgdeps.cpp (promote): Macro redefined in terms of...
1194         (with_flags, with_download): ...these new macros; implement and...
1195         (pkgXmlDocument::ResolveDependencies): ...use them to enable/schedule
1196         ACTION_DOWNLOAD only when expected that it may be necessary.
1197
1198 2011-11-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
1199
1200         Fix packaging anomalies for source and licence distributions.
1201
1202         * Makefile.in (licdist): Link README from ${CURDIR}, not from '..'.
1203         (srcdist): Explicitly link pkginfo.c from ${CURDIR} to src/pkginfo,
1204         rather than as implied prerequisite; this avoids a bogus attempt to
1205         link srcdist-doc into src/pkginfo.
1206
1207 2011-11-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
1208
1209         Bump version number for subsequent CVS snapshots.
1210
1211         * configure.ac (AC_INIT): Set version to 0.4-alpha-1.1cvs
1212
1213 2011-11-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
1214
1215         mingw-get-0.4-mingw32-alpha-1 released.
1216
1217         * configure.ac (AC_INIT): Adjust version number.
1218         * srcdist-doc/NEWS.in: Updated; document new features and bugs fixed.
1219         * All files (r0-4-alpha-1): Tag assigned.
1220
1221 2011-11-04  Keith Marshall  <keithmarshall@users.sourceforge.net>
1222
1223         Don't upgrade installed DLL components to incompatible version.
1224         Provide clearer diagnostics for failed requests on implied packages.
1225
1226         * src/pkgdeps.cpp (is_abi_compatible): New static inline function.
1227         (pkgXmlDocument::ResolveDependencies) [is_installed]: Use it.
1228         (pkgXmlDocument::ResolveDependencies) [DEBUG_TRACE_DEPENDENCIES]:
1229         Clean up and improve diagnostic message content and formatting.
1230         (pkgXmlDocument::Schedule) [(upgrade || remove) && ! installed]:
1231         Downgrade diagnostic to WARNING, for implicitly specified component
1232         packages; provide additional explanatory diagnostics.
1233
1234         * src/pkgspec.cpp (pkgSpecs::VersionComparator):
1235         * src/pkgexec.cpp (pkgActionItem::SelectIfMostRecentFit):
1236         [DEBUG_TRACE_DEPENDENCIES]: Eliminate diagnostic noise.
1237
1238 2011-10-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
1239
1240         Fix --download-only vs. --reinstall conflict.
1241
1242         * src/pkgexec.cpp (pkgActionItem::Execute) [OPTION_DOWNLOAD_ONLY]:
1243         Test for explicit inequality, rather than equality to zero; since the
1244         2011-08-30 update, which made --download-only also imply --reinstall,
1245         it will test as non-zero when --reinstall is specified, even though
1246         --download-only is not.
1247
1248 2011-10-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
1249
1250         Add support for non-specific upgrade of all installed packages.
1251
1252         * src/pkgbase.h (pkgXmlDocument::RescheduleInstalledPackages):
1253         New public method; declare it.
1254
1255         * src/pkgdeps.cpp (pkgXmlDocument::RescheduleInstalledPackages):
1256         Implement it.
1257
1258         * src/climain.cpp (climain) [ACTION_UPGRADE && argc < 2]: Invoke
1259         pkgXmlDocument::RescheduleInstalledPackages() to schedule the upgrade
1260         request for all packages currently registered as installed.
1261
1262 2011-10-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
1263
1264         Implement "source" and "licence" operations.
1265
1266         * src/pkgopts.h (OPTION_ALL_DEPS): New option code; define it.
1267         * src/clistub.c (main): Associate it with...
1268         (all-related, recursive): ...these synonymous option names...
1269         (options): ...defined within this local structured array.
1270         (help_text): Document them; also document "source" and "licence" as
1271         new operations which may be specified on the command line.
1272
1273         * src/pkgtask.h (action_source, action_licence): Enumerate them.
1274         (ACTION_SOURCE, ACTION_LICENCE): Define their manifest values, and...
1275         * src/pkgexec.cpp (action_name): ...associate with operation names.
1276
1277         * src/pkgbase.h (pkgActionItem::GetScheduledSourceArchives):
1278         (pkgActionItem::GetSourceArchive, pkgXmlDocument::GetSourceArchive):
1279         New public methods; declare them for external implementation.
1280         (pkgXmlDocument::GetScheduledSourceArchives): New public method;
1281         implement it as inline.
1282
1283         * src/climain.cpp (pkgProcessedArchives): New pointer to stack of...
1284         (pkgArchiveNameList): ...this new locally defined class; implement it.
1285         (pkgActionItem::GetSourceArchive, pkgXmlDocument::GetSourceArchive):
1286         (pkgActionItem::GetScheduledSourceArchives): Implement them.
1287         (climain): Add invocation hooks.
1288
1289 2011-10-04  Keith Marshall  <keithmarshall@users.sourceforge.net>
1290
1291         Establish mapping from release tarname to source tarname.
1292
1293         * src/pkgreqs.cpp (inherited_requirement): New inline function.
1294         (requirement): Use it; adapt to propagate release archive format and
1295         compression type fields, in addition to version fields, when resolving
1296         "%" wildcard matches within the template for the resultant tarname.
1297         (pkgAssociateName): New public function; implement it for use by...
1298         * src/pkgname.cpp (pkgResolvedName): ...this new inline function.
1299         (pkgXmlNode::SourceArchiveName): Use it; adapt to accept a category
1300         selector, so it may resolve source or licence tarnames on demand.
1301
1302         * src/pkgbase.h (pkgXmlNode::SourceArchiveName): Modify declaration;
1303         add category selector argument to support source/licence choice.
1304
1305 2011-10-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
1306
1307         Facilitate downloads using diverse cache directories.
1308
1309         * src/pkgbase.h (pkgActionItem::DownloadSingleArchive): New private
1310         method; declare it; it handles the download for a single named archive
1311         file, and stores it in a specifed cache directory.
1312
1313         * src/pkginet.cpp (pkgActionItem::DownloadSingleArchive): Implement
1314         it; factor its code from the original implementation within...
1315         (pkgActionItem::DownloadArchiveFiles): ...this; adapt to use it.
1316
1317 2011-10-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
1318
1319         Establish cache directory for source archive downloads.
1320
1321         * src/mkpath.h (pkgSourceArchivePath): New function; declare it.
1322         * src/mkpath.c (pkgSourceArchivePath): Implement it.
1323
1324 2011-08-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1325
1326         Support archive extraction to arbitrary destination without install.
1327
1328         * src/pkgproc.h (pkgArchiveProcessor::ExtractFile): New virtual
1329         helper method for use, as core helper, by derived classes; declare it.
1330         (pkgArchiveProcessor::CreateExtractionDirectory): Likewise.
1331         (pkgTarArchiveProcessor): Declare overloaded default constructor.
1332         (pkgTarArchiveExtractor): New class definition; it is derived from
1333         pkgTarArchiveProcessor.
1334
1335         * src/tarproc.cpp (pkgArchiveProcessor::ExtractFile): Implement it.
1336         (pkgArchiveProcessor::CreateExtractionDirectory): Likewise.
1337         (pkgTarArchiveExtractor): Implement constructor, together with...
1338         (pkgTarArchiveExtractor::ProcessDirectory): ...this method, and also...
1339         (pkgTarArchiveExtractor::ProcessDataStream): ...this one; these are
1340         declared as abstract, in the pkgTarArchiveProcessor base class.
1341         (pkgTarArchiveInstaller::ProcessDirectory): Simplify; it now delegates
1342         directory creation to pkgArchiveProcessor::CreateExtractionDirectory.
1343         (pkgTarArchiveInstaller::ProcessDataStream): Simplify; delegate file
1344         handling to pkgArchiveProcessor::ExtractFile, as appropriate.
1345
1346 2011-08-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1347
1348         Make --download-only and --print-uris imply --reinstall.
1349
1350         * src/pkgopts.h (OPTION_PRINT_URIS): Adjust definition.
1351         (OPTION_DNLOAD_ONLY, OPTION_DOWNLOAD_ONLY): Likewise.
1352
1353 2011-08-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
1354
1355         Implement --download-only and --print-uris options.
1356
1357         * src/pkgopts.h (OPTION_DOWNLOAD_ONLY, OPTION_PRINT_URIS):
1358         New manifest constants, identifying flag bits; define them.
1359         (OPTION_DNLOAD_ONLY): Likewise; an alias for OPTION_DOWNLOAD_ONLY.
1360
1361         * src/pkgbase.h (pkgActionItem::PrintURI): New private method.
1362         * src/pkginet.cpp: Implement it.
1363
1364         * src/clistub.c (options): Add "download-only" and "print-uris".
1365         (help_text): Document them.
1366         * src/pkgexec.cpp (pkgActionItem::Execute): Process them.
1367
1368 2011-07-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1369
1370         mingw-get-0.3-mingw32-alpha-2.1 released.
1371
1372         * configure.ac (AC_INIT): Adjust version number.
1373         * srcdist-doc/NEWS.in: Updated; document bugs fixed.
1374         * All files (r0-3-alpha-2-1): Tag assigned.
1375
1376 2011-07-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1377
1378         Adopt tar.xz as default package archive format.
1379
1380         * Makefile.in (TARZIP, TAREXT): New macros; define them.
1381         (bindist, licdist, srcdist): Use them in place of hardcoded tar.gz
1382         (maintainer-clean): Expunge tar files of any compression format.
1383
1384 2011-07-27  Keith Marshall  <keithmarshall@users.sourceforge.net>
1385
1386         Correct handling of release status in requirements specifications.
1387
1388         * src/debug.h (DEBUG_TRACE_DEPENDENCIES): New tracing hook; define it.
1389         * src/pkgexec.cpp (pkgActionItem::SelectIfMostRecentFit): Use it; add
1390         function entry/exit tracing report hooks.
1391         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies): Likewise;
1392         also add internal trace point reporting, which may also require...
1393         (show_required): ...this new static inline DEBUG_INVOKED function.
1394
1395         * src/pkgreqs.cpp (requirement): Propagate release status and release
1396         reference index fields from requirer, when package version requirement
1397         is specified by a '%' token, and no explicit release status override
1398         is included in the requirement specification.
1399
1400         * src/pkgspec.cpp (is_wildcard_spec): New static inline helper.
1401         (pkgSpecs::VersionComparator): Use it to identify any package version
1402         specification which may require the extension of a wildcard match, to
1403         span the package version and release status fields; also add tracing
1404         hooks, triggered on DEBUG_TRACE_DEPENDENCIES, to facilitate debugging.
1405
1406 2011-06-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1407
1408         Avoid accidental RCS keyword substitutions.
1409
1410         * Makefile.in (DOLLAR): New macro; define it.
1411         (readme.txt, readme.txt.in): Use it, where unexpanded RCS Id keyword
1412         matching is intended.
1413
1414 2011-06-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1415
1416         Mercurial support revisited.
1417
1418         * .cvsignore (.hgtags): Add to CVS untracked list.
1419
1420 2011-06-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1421
1422         Update readme.txt ID tag-line to track NEWS rather than README.
1423
1424         * Makefile.in (readme.txt.in): New rule; implement it.
1425         (readme.txt.tag): Likewise; this implements the tag-line tracking.
1426         (readme.txt): Rule redefined in terms of the preceding pair.
1427
1428 2011-06-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
1429
1430         mingw-get-0.3-mingw32-alpha-2 released.
1431
1432         * configure.ac (AC_INIT): Adjust version number.
1433         * srcdist-doc/NEWS.in: Updated; document new features and bugs fixed.
1434         * All files (r0-3-alpha-2): Tag assigned.
1435
1436 2011-06-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
1437
1438         Add internal documentation for --reinstall option.
1439
1440         * src/clistub.c (help_text): Add description for "--reinstall".
1441
1442 2011-06-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
1443
1444         Support use of Mercurial within a CVS working copy.
1445
1446         * .cvsignore (.hg, .hgignore): Don't have CVS track these.
1447
1448 2011-06-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
1449
1450         Implement --reinstall option.
1451
1452         * src/pkgopts.h (OPTION_REINSTALL): New macro; define it.
1453         (OPTION_GENERIC, OPTION_SHIFT_MASK): Likewise.
1454         (OPTION_EXTRA_FLAGS): New field; declare it.
1455
1456         * src/clistub.c (options): Add "reinstall".
1457         (OPTION_GENERIC): Use it where appropriate; within its scope...
1458         (OPTION_STORAGE_CLASS): Improve descriptive comments; add handling for
1459         default case of flag type options requiring an alignment shift.
1460
1461         * src/pkgexec.cpp: Remove previous "always reinstall" kludge.
1462         (pkgOptionSelected, PKG_OPTION_REINSTALL): Remove obsolete macros.
1463         (pkgActionItem::Execute): Check for "upgrade" request on any package
1464         which is already up to date; report this state, otherwise...
1465         [OPTION_REINSTALL || ACTION_UPGRADE]: Mark package as "removed", to
1466         avoid bail-out on "package already installed", when calling...
1467         (pkgInstall): ...this.
1468
1469 2011-06-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1470
1471         Don't require -vv to report progress of update operation.
1472
1473         * src/pkgbind.cpp (pkgRepository::GetPackageList): Eliminate all
1474         basename() calls; `dname' already tells us what it should return.
1475         [update]: Report progress, irrespective of verbosity setting.
1476
1477 2011-06-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
1478
1479         Fix MinGW-Bug #3313806.
1480
1481         * src/pkginfo/pkginfo.l (CMS_KEYWORDS): Do not match them within the
1482         PACKAGE_NAME field; this avoids misinterpretation as a release status
1483         qualifier when intended as part of the package name, as in msys-cvs.
1484
1485 2011-06-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
1486
1487         Provisional correction for MinGW-Bug #3309438.
1488
1489         * src/debug.h [DEBUGLEVEL == 0]: Provide defaults for...
1490         (DEBUG_ENABLED, DEBUG_REQUEST): ...these macros.
1491
1492         * src/tarproc.cpp (pkgTarArchiveInstaller::ProcessDirectory):
1493         (pkgTarArchiveInstaller::ProcessDataStream): Use DEBUG_REQUEST to
1494         enable runtime trace activation for previous compile time choices.
1495
1496 2011-05-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1497
1498         mingw-get-0.3-mingw32-alpha-1 released.
1499
1500         * configure.ac (AC_INIT): Adjust version number.
1501         * srcdist-doc/NEWS.in: Updated; document new features.
1502         * All files (r0-3-alpha-1): Tag assigned.
1503
1504 2011-05-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1505
1506         Support assignment of DEBUGLEVEL at configure time.
1507
1508         * configure.ac (DEBUGLEVEL): Declare as a precious variable, using
1509         AC_ARG_VAR; also declare with AC_SUBST, to ensure it is initialised.
1510
1511         * Makefile.in (DEBUGLEVEL): Let AC_SUBST assign it.
1512
1513 2011-05-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1514
1515         Work around bugs in MinGW and GNU getopt_long_only() implementations.
1516
1517         * src/getopt.c: New file; this is a free-standing replacement for any
1518         implementation provided by system libraries.  We will always use this
1519         to ensure correct operation irrespective of system bugs; (different
1520         bug manifestations have been identified in the stock MinGW and GNU
1521         implementations).
1522
1523         * Makefile.in (mingw-get.EXEEXT): Use it.
1524
1525         * src/clistub.c (options): Remove redundant declaration of `-v' as a
1526         long form option.
1527
1528 2011-05-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1529
1530         Implement user selection of traceable features at run-time.
1531
1532         * src.pkgopts.h (OPTION_VERBOSE_MAX): New macro; define it.
1533
1534         * src/debug.h (DEBUG_ENABLED): New macro; define it.
1535         (DEBUG_REQUEST, DEBUG_REQUEST_FLAGS, DEBUG_TRACE_DYNAMIC): Likewise.
1536
1537         * src/clistub.c (main) [--trace]: Don't make it available unless...
1538         [DEBUG_ENABLED(DEBUG_TRACE_DYNAMIC)]: ...this is set (at compile-time).
1539         [--verbose]: Limit to OPTION_VERBOSE_MAX, using...
1540         (atmost): ...this new macro; define it.
1541         (options): Declare `-v' as both long and short form, pending bug fix
1542         in MinGW's getopt_long_only() implementation.
1543
1544         * src/pkginet.cpp (pkgInternetAgent::OpenURL): Use DEBUG_REQUEST.
1545         (pkgInternetLzmaStreamingAgent::TransferData): Likewise.
1546         (pkgInternetStreamingAgent::TransferData): Likewise.
1547         (pkgInternetStreamingAgent::Get): Likewise.
1548
1549         * src/pkgunst.cpp (pkgActionItem::SetAuthorities): Use DEBUG_REQUEST.
1550         (pkg_rmdir, pkg_unlink): Likewise.
1551
1552         * src/sysroot.cpp (pkgXmlDocument::LoadSystemMap): Use DEBUG_REQUEST.
1553
1554 2011-05-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
1555
1556         Implement protocol for processing global program options.
1557
1558         * src/pkgopts.h: New file.
1559
1560         * src/climain.cpp (cli_setopts): New function; implement it.
1561         (pkgOptions): Likewise.
1562
1563         * src/clistub.c (xatoi): New function; implement it.
1564         (cli_setargv): New inline helper function; implement it.
1565         (main): Use it.  Also incorporate implementation of...
1566         (parsed_options): New structure; it accommodates...
1567         (verbose, trace): New options; interpret them, and...
1568         (help_text): ...document them.
1569
1570         * src/pkgbind.cpp (pkgRepository::GetPackageList): Make catalogue
1571         loading notifications and progress reports conditional on...
1572         [OPTION_VERBOSE > 1]: ...this.
1573
1574 2011-05-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1575
1576         Augment known development status keywords and accept CMS labels.
1577
1578         * src/pkginfo/pkginfo.l (CMS_KEYWORDS): Define new provisional list;
1579         add transitional state scanner rule and code to interpret them.
1580         (STATUS_KEYWORDS): Add "pre" and "rc" to existing list; modify scanner
1581         code to maintain consistency with CMS_KEYWORDS processing; also extend
1582         this coding strategy to other rules.
1583
1584         * src/pkginfo/driver.c (spec): Strip initial '$' token from displayed
1585         field values; (we expect it only for a CMS_KEYWORDS field value).
1586
1587         * src/pkgreqs.cpp (pkgSpecs::GetTarName): Remove any initial '$' token
1588         from PACKAGE_RELEASE_STATUS field, when performing reverse of tarname
1589         decomposition transformation.
1590
1591 2011-05-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1592
1593         Correct omission from 2011-02-18 commit.
1594
1595         * src/tarproc.cpp (Copyright Notice): Add 2011 as year of release.
1596
1597 2011-05-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
1598
1599         mingw-get-0.2-mingw32-alpha-4 released.
1600
1601         * configure.ac (AC_INIT): Adjust version number.
1602         * srcdist-doc/NEWS.in: Updated; add bug-fix/feature descriptions.
1603         * All files (r0-2-alpha-4): Tag assigned.
1604
1605 2011-05-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1606
1607         Fix MinGW-Bug #3297660 (reported by Chris Sutcliffe).
1608
1609         * src/pkgbase.h (pkgActionItem::SetAuthorities): Return unsigned long.
1610         (pkgActionItem::HasAttribute): New inline method; implement it.
1611
1612         * src/pkgtask.h (ACTION_DOWNLOAD, ACTION_DOWNLOAD_OK): New macros.
1613
1614         * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles):
1615         [ACTION_DOWNLOAD]: Assert it at commencement of each package download;
1616         clear it again, on successful download completion.
1617
1618         * src/pkginst.cpp (pkgtask.h): #include it.
1619         (pkgInstall) [ACTION_DOWNLOAD]: Don't proceed with installation when
1620         set; this indicates failed download; diagnose it.
1621
1622         * src/pkgunst.cpp (pkgRemove) [ACTION_DOWNLOAD && ACTION_UPGRADE]:
1623         Don't proceed with pre-emptive removal when both set; this indicates
1624         failed download of replacement package; diagnose it.
1625
1626 2011-05-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1627
1628         Fix MinGW-Bug #3295526 (reported by Charles Wilson).
1629
1630         * src/pkgunst.cpp (sys/stat.h): #include it; we need it for...
1631         (pkg_unlink): ...chmod( file, S_IWRITE ), emulating `rm -f' semantics.
1632
1633 2011-05-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1634
1635         Diagnose and aggressively retry failed download connections.
1636
1637         * src/debug.h (DEBUG_TRACE_INTERNET_REQUESTS): New macro; define it.
1638
1639         * src/pkginet.cpp (debug.h): #include it.
1640         (pkgDownloadMeter): New abstract class; declare it and implement its
1641         default (non-abstract) data and methods; derive...
1642         (pkgDownloadMeterTTY): ...this new class from it; implement it...
1643         (pkgInternetStreamingAgent::Get): ...and instantiate it (naively for
1644         now), as associated pkgDownloadMeter object; add tracing diagnostic.
1645         (pkgInternetAgent::OpenURL): Don't inline it; move implementation out
1646         of line; add retry loops to aggressively retry failed connections.
1647         (pkgInternetAgent::QueryContentLength): New method; implement it.
1648         (pkgInternetStreamingAgent::TransferData): Avoid Microsoft specific
1649         data type `DWORD'; prefer equivalent standard `unsigned long'.  Add
1650         tracing diagnostic.  Remove progress diagnostic; replace it with an
1651         `Update' request to associated pkgDownloadMeter.
1652         (pkgInternetLzmaStreamingAgent::GetRawData): Avoid `DWORD' data type.
1653         (pkgInternetLzmaStreamingAgent::TransferData): Likewise; add tracing
1654         diagnostic on failure.
1655
1656 2011-03-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
1657
1658         mingw-get-0.2-mingw32-alpha-3 released.
1659
1660         * configure.ac (AC_INIT): Adjust version number.
1661         * srcdist-doc/NEWS.in: Updated; add bug-fix description.
1662         * All files (r0-2-alpha-3): Tag assigned.
1663
1664 2011-03-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1665
1666         Provisional handling for http proxy authentication.
1667         (Adapted from patch by Scott Michel <pingbak@users.sourceforge.net>)
1668         (ref: MinGW-Patch #3158453)
1669
1670         * src/pkginet.cpp: Several format/layout adjustments; add comments.
1671         Eliminate several instances of Microsoft specific typedef nastiness.
1672         (dmh_dialogue_context): New macro; kludge definition to support...
1673         (pkgInternetAgent::OpenURL) [HTTP_STATUS_PROXY_AUTH_REQ]: Detect
1674         and handle it.
1675
1676 2011-03-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1677
1678         Expand macros in path names for files and directories to be removed.
1679
1680         * src/pkgunst.cpp (pkgRemove): Format sysroot as a template, so...
1681         (pkg_rmdir, pkg_unlink): ...are able to use mkpath() to construct the
1682         full path name for each file or directory to be removed.
1683
1684 2011-03-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1685
1686         Correct defective activation logic for some debugging hooks.
1687
1688         * src/pkgunst.cpp (pkg_rmdir, pkg_unlink) [DEBUG_INVOKE_IF]:
1689         (pkgActionItem::SetAuthorities) [DEBUG_INVOKE_IF]: Use bit-wise `&'
1690         operator, not `&&', to evaluate DEBUGLEVEL state.
1691
1692 2011-03-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
1693
1694         Avoid Unicode hyphens in generated ASCII document files.
1695
1696         * Makefile.in (NROFF): New macro; define it to invoke `nroff -Tascii'.
1697         (%.dist, readme.txt): Use it to ensure that output is pure ASCII.
1698
1699 2011-03-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
1700
1701         mingw-get-0.2-mingw32-alpha-2 released.
1702
1703         * configure.ac (AC_INIT): Adjust version number.
1704         * srcdist-doc/NEWS.in: Updated; add bug-fix description.
1705         * All files (r0-2-alpha-2): Tag assigned.
1706
1707 2011-03-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
1708
1709         Fix MinGW-Bug 3212246.
1710
1711         * src/keyword.c (has_keyword): Avoid incrementing the comparison
1712         pointers when a significant character in one string is not matched in
1713         the other; previously the pointers were left pointing one character to
1714         the right of the mismatch, and this was overlooked if the mismatch
1715         occurred at the rightmost character in both strings.
1716
1717 2011-03-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1718
1719         mingw-get-0.2-mingw32-alpha-1 released.
1720
1721         * configure.ac (AC_INIT): Set version number; correct capitalisation
1722         in URI reference to bug reporting instructions.
1723
1724         * srcdist-doc/NEWS.in: Confirm release date.
1725         [bug reporting]: Remove redundant paragraph; the information is
1726         provided, via reference to mingw.org. in the README and INSTALL files.
1727
1728         * All files (r0-2-alpha-1): Tag assigned.
1729
1730 2011-03-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
1731
1732         * srcdist-doc/INSTALL.in [building]: Qualify liblzma.a requirement;
1733         add earliest acceptable snapshot release date.
1734
1735 2011-03-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
1736
1737         Remove unused 7zip and boost source code from CVS trunk.
1738
1739         * 7z: Directory and all content removed.
1740         * boost: Likewise.
1741
1742 2011-03-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
1743
1744         Refactor and update existing installation and usage instructions.
1745
1746         * src/clistub.c (help_text): Updated.
1747
1748         * srcdist-doc: New directory.
1749
1750         * README: Deleted; its content refactored into...
1751         * srcdist-doc/README.in srcdist-doc/INSTALL.in srcdist-doc/NEWS.in:
1752         ...these new template files, updated for current development state.
1753
1754         * srcdist-doc/gendoc.sed.in: New sed script; it directs formatting of
1755         generated text files derived from the srcdist-doc templates.
1756
1757         * Makefile.in (SRCDIST_SUBDIRS): Add srcdist-doc.
1758         (SRCDIST_FILES): Add NEWS and INSTALL.
1759         (srcdist-doc): New build rule to generate README, NEWS and INSTALL.
1760         (srcdist, licdist): Adjust path to locate them.
1761         (readme.txt): New build rule to generate on-line package description.
1762         (dist): Require it.
1763         (distclean): Don't remove Makefile...
1764         (maintainer-clean): ...but do it here instead.  Also remove generated
1765         README, NEWS and INSTALL, the autom4te cache, and all distributable
1766         zip files, in addition to tarballs, for the current version.
1767
1768 2011-02-27  Keith Marshall  <keithmarshall@users.sourceforge.net>
1769
1770         Initial implementation for "remove" feature.
1771
1772         * src/pkgbase.h: Update copyright notice; add current year.
1773         (pkgActionItem::SetPrimary): New inline public method; declare it.
1774         (pkgActionItem::SetAuthorities): New public method; declare it.
1775
1776         * src/pkgtask.h (ACTION_PREFLIGHT, ACTION_REMOVE_OK): New defines.
1777
1778         * src/pkgproc.h: Update copyright notice; add current year.
1779         (pkgManifest::GetSysRootReference): New public method; declare it.
1780         (pkgManifest::GetRoot): New inline method; declare and implement it.
1781         (pkgManifest::DetachSysRoot): Argument type changed to const char*.
1782         (pkgRemove): New extern "C" function; declare it.
1783
1784         * src/pkgexec.cpp (pkgActionItem::SetPrimary): Implement it, and...
1785         (pkgXmlDocument::Schedule): ...use it to promote actions on all user
1786         specified packages, as listed on the command line, to primary status.
1787         (pkgActionItem::Execute): Repeatedly invoke...
1788         (pkgActionItem::SetAuthorities): ...this; incorporate call of...
1789         (pkgActionItem::DownloadArchiveFiles): ...this, within the loop, so
1790         that we retry failed downloads at least a second time.
1791         [ACTION_REMOVE]: Delete stub; invoke pkgRemove().
1792
1793         * src/pkgunst.cpp: New file.
1794         (pkgActionItem::SetAuthorities): Implement it.
1795         (pkgManifest::GetSysRootReference): Implement it.
1796         (pkgManifest::DetachSysRoot): Implement it per new declaration.
1797         (pkgRemove): Implement it.
1798
1799         * Makefile.in (CORE_DLL_OBJECTS): Add pkgunst.OBJEXT
1800
1801 2011-02-26  Keith Marshall  <keithmarshall@users.sourceforge.net>
1802
1803         Work-around for improper stderr buffering in MSYS mintty and rxvt.
1804         (Merged from r0-1-alpha-5 branch).
1805
1806         * src/dmh.cpp (dmhTypeTTY::emit_and_flush): New private method.
1807         (dmhTypeTTY::printf, dmhTypeTTY::notify): Use it to force an fflush()
1808         after each output record is written to stderr.
1809
1810         * README: Update as appropriate.
1811
1812 2011-02-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
1813
1814         Tidy up some debugging hooks.
1815
1816         * src/debug.h (DEBUG_INVOKED): New macro; define it.
1817         (DEBUG_INVOKE_IF): Likewise; this takes arguments providing for
1818         conditional invocation of code when DEBUGLEVEL is non-zero; make it
1819         expand to nothing, when DEBUGLEVEL is zero.
1820         (DEBUG_TRACE_INIT): Redefined macro; value changed to 0x0010.
1821         (DEBUG_TRACE_TRANSACTIONS, DEBUG_SUPPRESS_INSTALLATION):
1822         (DEBUG_UPDATE_INVENTORY): New macros; define them.
1823
1824         * src/tarproc.cpp (pkgTarArchiveInstaller::ProcessDirectory):
1825         (pkgTarArchiveInstaller::ProcessDataStream): Refactor debugging hooks;
1826         implement them in terms of DEBUGLEVEL, with reference to...
1827         (DEBUG_SUPPRESS_INSTALLATION, DEBUG_UPDATE_INVENTORY): ...these.
1828
1829 2011-02-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
1830
1831         Make package version comparisons more robust.
1832
1833         Fixes an issue reported by Chris Sutcliffe: previously, version
1834         comparisons were evaluated solely on the basis of differences in the
1835         package version field itself.  Henceforth, if this field compares as
1836         equal, then the comparison is extended to also consider differences
1837         between development phase qualifiers, and, if these too compare as
1838         equal, to differences in the target subsystem version fields.
1839
1840         * src/pkginfo/pkginfo.h (pkgSpecs::VersionComparator): New private
1841         method; declare it.
1842
1843         * src/pkgspec.cpp (pkgSpecs::VersionComparator): Implement it.
1844         (pkgSpecs::operator<, pkgSpecs::operator<=, pkgSpecs::operator>=):
1845         (pkgSpecs::operator>): Use it, replacing...
1846         (version): ...this static function; now unreferenced; delete it.
1847
1848         * src/vercmp.h (pkgVersionInfo::pkgVersionInfo): Make it inline; it
1849         now delegates the entire class construction operation to...
1850         (pkgVersionInfo::Parse): ...this new private method; declare it.  This
1851         is also used to facilitate implementation of...
1852         (pkgVersionInfo::Reset): ...this new inline method, also requiring...
1853         (pkgVersionInfo::FreeAll): ...this new inline method; also now used by
1854         the class destructor, it encapsulates separate calls to...
1855         (pkgVersionInfo::Free): ...this original inline method, renamed...
1856         (pkgVersionInfo::FreeEntry): ...as this.
1857
1858         * src/vercmp.cpp (pkgVersionInfo::Parse): Implement it.
1859
1860 2011-02-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
1861
1862         Merge from mingw-get-0.1-mingw32-alpha-5 bug-fix branch.
1863
1864         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies): Promote
1865         "install" action on new prerequisites, where a previously uninstalled
1866         package is required to satisfy any "upgrade" dependency.
1867
1868         * src/pkgexec.cpp (pkgActionList::Execute): Don't make misleading
1869         claims concerning package removal.
1870
1871         * src/pkgtask.h (STRICTLY_GT, STRICTLY_LT, ACTION_PRIMARY): Add one
1872         level of parentheses around defining expressions.
1873
1874 2011-02-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
1875
1876         Publish mingw-get-0.0-mingw32-alpha-5.1 bug-fix release.
1877
1878         * README: Updated to reflect changes.
1879
1880 2011-02-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
1881
1882         Improve diagnostics for failed GUI invocation.
1883
1884         * src/guimain.cpp: New file; currently delivers only a diagnostic
1885         stub, provided by Sze Howe Koh <axfangli@users.sourceforge.net>, to
1886         pop-up a message block explaining why GUI mode cannot be invoked.
1887
1888         * Makefile.in (GUI_LDFLAGS): New macro; it is required by...
1889         (gui$EXEEXT): ...this new build rule; add to prerequisites of...
1890         (all): ...this [default] build rule; redefine this in terms of...
1891         (BIN_PROGRAMS, LIBEXEC_PROGRAMS, LIBEXEC_DATA): ...these new macros;
1892         define them, and also use them as loop iterator objectives for...
1893         (install, install_strip): ...these; also schedule them...
1894         (clean): ...for removal by this.
1895
1896         * src/clistub.c (Copyright): Add new year.
1897         (main): Amend error message, if gui$EXEEXT doesn't start; make it
1898         more intelligible to normal users.
1899
1900 2011-02-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
1901
1902         Correct omissions from packaged source tarball.
1903
1904         * Makefile.in (Copyright): Add new year.
1905         (SRCDIST_FILES): Add aclocal.m4
1906         (SRCDIST_SUBDIRS): Add m4
1907
1908 2011-01-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
1909
1910         Reduce path names to base names, in some diagnostic message contexts.
1911
1912         * src/climain.cpp: Update copyright notice for new year.
1913         (climain): Extract base name from argv[0], to pass as program name tag
1914         in initialisation of diagnostic message handler.
1915
1916         * src/dmh.h, src/dmh.cpp: Update copyright notices; make some layout
1917         adjustments, for more consistent formatting style.
1918
1919         * src/pkgbind.cpp: Update copyright notice.
1920         (pkgRepository::GetPackageList): Reduce path names for catalogue files
1921         to their base names, when reporting them in diagnostic messages.
1922
1923 2011-01-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
1924
1925         Avoid a potential out-of-range action name look-up.
1926
1927         * src/pkgdeps.cpp: Update copyright notice for new year.
1928         (pkgXmlDocument::Schedule): Mask action code with ACTION_MASK, to
1929         determine correct action name when diagnosing uninstalled package.
1930
1931 2011-01-03  Keith Marshall  <keithmarshall@users.sourceforge.net>
1932
1933         Make "install" and "remove" notifications symmetric.
1934
1935         * configure.ac (AC_INIT): Bump version to "0.1-alpha-6cvs".
1936         (YEARS_OF_ISSUE): Add new year.
1937         
1938         * src/pkginst.cpp: Update copyright notice for new year.
1939         (pkgInstall): Add notification for package being installed.
1940
1941 2010-12-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
1942
1943         Add preliminary CLI support for "list" and "show" actions.
1944
1945         * src/pkgtask.h (ACTION_PRIMARY): New manifest constant; define it.
1946         (ACTION_LIST, ACTION_SHOW): Likewise; cast to enumerated values for...
1947         (action_list, action_show): ...these; define them.
1948
1949         * src/pkgexec.cpp (action_name): Add defining text for...
1950         (action_list, action_show): ...these.
1951
1952         * src/climain.cpp: Partially revert 2010-11-01 change...
1953         (climain) [! ACTION_UPDATE]: Reinstate original "if" block, moving
1954         the "switch" block within it, but without the ACTION_UPDATE case.
1955         [ACTION_LIST, ACTION_SHOW]: New "switch" cases; they invoke...
1956         (pkgXmlDocument::DisplayPackageInfo): ...this new method.
1957
1958         * src/pkgbase.h (pkgXmlDocument::DisplayPackageInfo): Declare it.
1959         (pkgActionItem::ConfirmInstallationStatus): New method; declare it.
1960         (pkgXmlNode::GetSysRoot): Make declaration style consistent with
1961         others in the class; do not name arguments in the declaration.
1962         (pkgXmlNode::FindFirstAssociate): Likewise.
1963         (pkgXmlNode::FindNextAssociate): Likewise.
1964
1965         * src/pkgshow.cpp: New file.
1966         (pkgXmlDocument::DisplayPackageInfo): Implement it.
1967
1968         * src/pkgdeps.cpp (pkgMsgUnknownPackage): New extern "C" function;
1969         implement it temporarily, pending a future i18n reimplementation.
1970         (assert_installed): Drop "inline" attribute; leave it as "static".
1971         Set "tarname" correctly, to match the installed package version; (it
1972         previously incorrectly returned the latest available version).
1973         (pkgActionItem::ConfirmInstallationStatus): Implement it.
1974         (pkgXmlDocument::Schedule) [ACTION_PRIMARY]: Set as appropriate.
1975         (pkgXmlDocument::Schedule) [ACTION_REMOVE || ACTION_UPGRADE]: Complain
1976         if requested package is not recorded as having been installed.
1977         (pkgXmlDocument::ResolveDependencies) [! ACTION_INSTALL]: Do not
1978         invoke it recursively.
1979
1980         * Makefile.in (pkgshow.$OBJEXT): Add reference.
1981
1982 2010-11-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
1983
1984         Lay groundwork for implentation of additional actions.
1985
1986         * src/climain.cpp (climain): Adjust indentation; replace `if' block...
1987         [action != ACTION_UPDATE]: ...with this default `switch' case, and...
1988         [action == ACTION_UPDATE]: ...this as explicit "do nothing" case.
1989
1990 2010-10-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
1991
1992         mingw-get-0.1-mingw32-alpha-5 released.
1993
1994         * configure.ac (AC_INIT): Bump version to 0.1-alpha-5.
1995         * README: Update release notes accordingly.
1996         * All files (r0-1-alpha-5): Tag assigned.
1997
1998 2010-10-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
1999
2000         Make pkgInitRites/pkgLastRites processing more robust;
2001         avoid a potential race condition in mingw-get-inst.
2002
2003         * src/rites.c: Refactor conditional code to segregate execution of...
2004         [defined IMPLEMENT_INITIATION_RITES]: ...this into distinct phases.
2005         (PHASE_ONE_RITES, PHASE_TWO_RITES): Define constants to identify them.
2006         (do_init_rites): Renamed to...
2007         (invoke_rites): ...this; inline it.
2008         (pkgLastRites): Invoke it, to pre-empt rename action of...
2009         (lastrites.exe): ...this, subsequently exec()ed process.
2010         (perror): Issue more informative diagnostic on exec() failure.
2011
2012         * src/clistub.c (IMPLEMENT_INITIATION_RITES): Stipulate as...
2013         (PHASE_ONE_RITES): ...this phase of implementation only.
2014
2015         * src/pkgexec.cpp (IMPLEMENT_INITIATION_RITES): Define to provide...
2016         (PHASE_TWO_RITES): ...this phase of implementation, facilitated by...
2017         (self_upgrade_rites): ...this locally defined RITES_INLINE function.
2018         (pkgActionItem::Execute): Invoke it, in remove/install loop, while...
2019         [init_rites_pending]: ...new loop local variable remains true.
2020
2021 2010-09-10  Charles Wilson  <mingw@cwilson.fastmail.fm>
2022
2023         Fix packaging bug in -lic package.
2024
2025         * Makefile.in (licdist): Use directory named
2026         "share", not "shared".
2027
2028 2010-09-10  Charles Wilson  <mingw@cwilson.fastmail.fm>
2029
2030         mingw-get-0.1-mingw32-alpha-4 released.
2031
2032         * All files (r0-1-alpha-4): Tag assigned.
2033
2034 2010-09-10  Charles Wilson  <mingw@cwilson.fastmail.fm>
2035
2036         Add rudimentary help option.
2037
2038         * README: Update release notes.
2039
2040         * src/clistub.c: Add --help option.
2041
2042 2010-09-10  Charles Wilson  <mingw@cwilson.fastmail.fm>
2043
2044         Fix "mingw-get deletes itself" bug in last rites handling.
2045
2046         * README: Add new release notes.
2047
2048         * configure.ac: Bump version to 0.1-alpha-4.
2049
2050         * src/dmh.h: If __cplusplus, include <exception> and
2051         declare dmh_exception class.
2052
2053         * src/dmh.cpp (class dmh_exception): Implement.
2054         (abort_if_fatal): If DMH_FATAL, throw dmh_exception rather
2055         than calling exit().
2056
2057         * src/climain.cpp (climain): Wrap entire function body in try/
2058         catch block. If dmh_exception is caught, return EXIT_FAILURE.
2059
2060         * src/clistub.c (main): Capture return value of climain(). If
2061         non-zero, perform last rites and return EXIT_FAILURE.
2062
2063 2010-08-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
2064
2065         mingw-get-0.1-mingw32-alpha-3 released.
2066
2067         * README: Add new release notes.
2068
2069         * All files (r0-1-alpha-3): Tag assigned.
2070
2071 2010-08-27  Keith Marshall  <keithmarshall@users.sourceforge.net>
2072
2073         Add runtime hooks to support self-upgrade for future releases.
2074
2075         * src/rites.c: New file; compile it free-standing, to provide...
2076         (lastrites.exe): ...this helper application for context clean-up;
2077         alternatively, use it as an include file, with pre-definition of...
2078         (IMPLEMENT_INITIATION_RITES): ...this, to implement...
2079         (pkgInitRites, pkgLastRites): ...these inline functions.
2080
2081         * src/clistub.c (main) [argc > 1]: Use them.
2082         (progname): New local variable within `main'; set it once, then use it
2083         instead of repeated references to `basename(*argv)' in diagnostics.
2084         (MINGW_GET_DLL, MINGW_GET_GUI): Relocate to `src/rites.c'.
2085
2086         * src/debug.h (DEBUG_INHIBIT_RITES_OF_PASSAGE):
2087         (DEBUG_FAIL_FILE_RENAME_RITE, DEBUG_FAIL_FILE_UNLINK_RITE): New
2088         defines; they facilitate debugging of the src/rites.c code.
2089
2090         * Makefile.in (lastrites$EXEEXT): New target; build as prerequisite...
2091         (all): ...of this primary target.
2092         (install, install-strip): Install it.
2093         (SRCDIST_FILES): Remove install-sh; it is now included in...
2094         (build-aux): ...this directory; add it to...
2095         (SRCDIST_SUBDIRS): ...this.
2096
2097 2010-08-24  Keith Marshall  <keithmarshall@users.sourceforge.net>
2098
2099         Set default sysroots relative to mingw-get installation directory.
2100
2101         * xml/profile.xml (system-map) [name == default]: For each of...
2102         [subsystem == mingw32]: ...set sysroot path to value of %R macro...
2103         [subsystem == msys]: ...and to its %R/msys/1.0 subdirectory.
2104
2105 2010-08-19  Keith Marshall  <keithmarshall@users.sourceforge.net>
2106
2107         Some dependency resolver enhancements and bug fixes.
2108
2109         * src/pkgbase.h (pkgXmlNode::GetContainerAttribute): New method;
2110         declare it.
2111
2112         * src/pkgdeps.cpp (pkgXmlNode::GetContainerAttribute): Implement it;
2113         it is used to retrieve package name attributes from the containing
2114         'package' element, when given a pointer to a 'release' element by...
2115         (assert_unmatched, assert_installed): ...these new static functions.
2116         (pkgXmlDocument::Schedule): Use them to reconstruct and register
2117         dependency reference data for previously installed packages which are
2118         no longer included in the distribution manifest.
2119         (pkgXmlDocument::ResolveDependencies): Fix a block nesting error;
2120         catch and diagnose unresolved dependencies; don't look beyond the XML
2121         document root node, (tinyxml error not caught?), when searching for
2122         requirements specified on container nodes.
2123
2124 2010-08-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2125
2126         Improve scheduling of package processing requests.
2127
2128         * src/pkgexec.cpp (pkgXmlDocument::Schedule): Inspect entire `actions'
2129         list, when checking for duplicate package processing requests; decline
2130         to schedule any such duplicate, or any request which lacks a package
2131         association.
2132
2133 2010-08-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
2134
2135         Lay foundation for selective compilation of debugging code.
2136
2137         * src/debug.h: New file...
2138         * src/sysroot.cpp: Include it.
2139         (pkgXmlDocument::LoadSystemMap): Make debugging output conditional...
2140         [DEBUGLEVEL & DEBUG_TRACE_INIT]: ...on this new debugging state.
2141
2142 2010-08-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
2143
2144         * src/pkgkeys.h: Typo in comment: file was previously identified as
2145         pkgkeys.c; corrected.
2146
2147 2010-08-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
2148
2149         Improve diagnostics for invalid references to non-release XML nodes.
2150
2151         * src/pkgkeys.h (value_unknown): New global string; declare it.
2152         * src/pkgkeys.c (value_unknown): Implement it.
2153
2154         * src/pkgname.cpp (pkgArchiveName): Identify XML element type when
2155         diagnosing references to elements of types other than release; use...
2156         (value_unknown): ...this, as appropriate.
2157
2158 2010-08-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
2159
2160         Guard against a potential buffer overrun.
2161
2162         * src/pkgreqs.cpp (pkgSpecs::SetProperty): Allocate an additional
2163         byte to accommodate an extra field separator, when inserting a new
2164         data value into a previously empty field.
2165
2166 2010-07-27  Cesar Strauss  <cestrauss@gmail.com>
2167
2168         Handle the GNU long name tar header format.
2169
2170         * src/pkgproc.h (TAR_ENTITY_TYPE_GNU_LONGNAME): New manifest constant;
2171         define it.
2172         (pkgTarArchiveProcessor::EntityDataAsString): New protected method;
2173         declare and...
2174         * src/tarproc.cpp: ...implement it.
2175         (pkgTarArchiveProcessor::Process): Before building the entry pathname,
2176         check for a GNU long name type header; when found, read pathname from
2177         the entry data area, before fetching the following header, from which
2178         to retrieve the associated entity data.
2179
2180 2010-06-24  Keith Marshall  <keithmarshall@users.sourceforge.net>
2181
2182         Work around an autoconf bug (reported by Stefano Sabatini).
2183
2184         * Makefile.in (VPATH): Use @top_srcdir@ instead of ${srcdir}; current
2185         autoconf incorrectly elides references to @srcdir@ and ${srcdir} when
2186         substituting within a VPATH specification for building `in-source'.
2187         Also, prefer colons to blanks as path name separators, for improved
2188         portability to non-GNU implementations of make; (recommendation by
2189         Ralf Wildenhues).
2190
2191 2010-06-24  Keith Marshall  <keithmarshall@users.sourceforge.net>
2192
2193         Include alias search, when matching component package name.
2194
2195         * src/keyword.c (has_keyword): Rearrange argument declarations for
2196         more natural order; update all callers accordingly.  Simplify; compare
2197         keyword to be matched with each successive candidate from match-list,
2198         character-by-character and in-place, so avoiding memory allocation
2199         for any local duplicate of the passed match-list; thus...
2200         (safe_strdup): ...this static function no longer required; delete it.
2201         (string.h): No references remain; do not include it.
2202
2203         * src/pkgfind.cpp (pkgXmlNode::FindPackageByName): Augment component
2204         package name matching to include potential matches of the look-up name
2205         with trailing component name stripped off, when that matches the class
2206         name of an identified component package, and the initial substring of
2207         the look-up name, after stripping, matches any specified alias name
2208         for the containing package.
2209
2210 2010-06-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
2211
2212         Address FIXME relating to identification of distributable files.
2213
2214         * install-sh: Move to...
2215         * build-aux: ...this new directory.
2216
2217         * Makefile.in (PACKAGE_DISTVERSION): Modify `sed' edit sequence; make
2218         it depend on, and ensure that it incorporates the expansion of...
2219         (PACKAGE_SUBSYSTEM): ...this new macro; defined as substitution of...
2220         (host_os): ...this autoconf variable, set by...
2221
2222         * configure.ac (AC_CANONICAL_HOST): ...this; add it, requiring...
2223         (AC_CONFIG_AUX_DIR): ...`build-aux' directory reference, providing...
2224
2225         * build-aux/config.guess, build-aux/config.sub: ...these new standard
2226         files; import them from the standard `build-aux' repository.
2227
2228 2010-05-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2229
2230         Bump version for next release cycle.
2231
2232         * configure.ac (AC_INIT): Bump version suffix to alpha-3.
2233
2234 2010-05-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2235
2236         mingw-get-0.1-mingw32-alpha-2 released.
2237
2238         * README: Add new release notes.
2239
2240         * xml/profile.xml: Update to use default referencing for...
2241         (package-list.xml.lzma): ...this repository master catalogue.
2242
2243         * All files (r0-1-alpha-2): Tag assigned.
2244
2245 2010-05-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
2246
2247         Make provision to protect user's profile settings during upgrade.
2248
2249         * Makefile.in (install): Remove `profile.xml'; replace it with...
2250         (install-profile): ...this new prerequisite installation goal; it
2251         renames the installed copy of `profile.xml' as `defaults.xml', within
2252         the installed package image.
2253
2254         * src/pkgkeys.h (defaults_key): New key; declare it.
2255         * src/pkgkeys.c: Some cosmetic formatting (tabulation) adjustments.
2256         (defaults_key): Implement it; it refers to the `defaults.xml' file.
2257
2258         * src/climain.cpp (climain): Check `profile_key' for accessibility of
2259         the `profile.xml' file; if [! R_OK] emit a diagnostic warning, fall
2260         back on `defaults_key', and attempt to load configuration from the
2261         distributed `defaults.xml' file.
2262
2263 2010-05-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
2264
2265         Add preliminary support for future `-reinstall' option.
2266
2267         * src/pkgexec.cpp (pkgActionItem::Execute) [ACTION_INSTALL]: Force
2268         installation if `-reinstall' option is selected, overriding state of
2269         any prior installation; temporarily assume that this option is always
2270         selected, to permit proper `upgrade' operation in the absence of any
2271         functional `uninstall' capability, and pending implementation of a
2272         mechanism for interpreting user specified options.
2273
2274 2010-05-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
2275
2276         Correct handling for "%R" macro in relative sysroot path specs.
2277
2278         * src/tarproc.cpp (pkgTarArchiveProcessor): In constructor, expand the
2279         sysroot path specification a second time, to capture the effect of any
2280         embedded macros, before computing the recorded `sysroot_len' value.
2281
2282 2010-05-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
2283
2284         Handle "%" wildcard matches in package and subsystem version strings.
2285
2286         * src/pkgbase.h (pkgSpecs): Forward declare it.
2287         (pkgActionItem::~pkgActionItem): Declare explicit destructor.
2288         (pkgActionItem::SetRequirements): Add extra `pkgSpecs*' argument;
2289         update references, passing additional argument in...
2290
2291         * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies): ...this.
2292
2293         * src/pkgexec.cpp (pkgActionItem::~pkgActionItem): Implement it.
2294         (pkgActionItem::SetRequirements): Delete obsolete implementation.
2295
2296         * src/pkginfo/pkginfo.h: Update copyright notice; add year 2010.
2297         (pkgSpecs::GetTarName): New public method; declare it.
2298         (pkgSpecs::SetProperty): New private method; declare it.
2299         (pkgSpecs::SetPackageName): New inline method; implement it.
2300         (pkgSpecs::SetPackageVersion, pkgSpecs::SetPackageBuild): Likewise.
2301         (pkgSpecs::SetSubSystemName, pkgSpecs::SetSubSystemVersion): Likewise.
2302         (pkgSpecs::SetSubSystemBuild, pkgSpecs::SetReleaseStatus): Likewise.
2303         (pkgSpecs::SetReleaseIndex, pkgSpecs::SetComponentClass): Likewise.
2304         (pkgSpecs::SetComponentVersion, pkgSpecs::SetPackageFormat): Likewise.
2305         (pkgSpecs::SetCompressionType): Likewise.
2306
2307         * src/pkginfo/pkginfo.l: Update copyright notice; add year 2010.
2308         (TRANS): Interpret "%" as wildcard in version string matches.
2309
2310         * src/pkgreqs.cpp: New file.
2311         (pkgActionItem::SetRequirements): Reimplement per new declaration;
2312         it now always allocates heap memory for requirements specifications.
2313         (pkgSpecs::GetTarName, pkgSpecs::SetProperty): Implement them.
2314
2315         * Makefile.in (CORE_DLL_OBJECTS): Add `pkgreqs.$(OBJEXT)'.
2316
2317 2010-04-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
2318
2319         Revert 2010-04-04 refactoring of tarproc.cpp and tarinst.cpp
2320
2321         * src/tarinst.cpp: File removed; its content merged into...
2322         * src/tarproc.cpp: ...this; it cannot be cleanly separated out.
2323
2324         * Makefile.in (tarinst.$OBJEXT): Remove reference.
2325
2326 2010-04-29  Keith Marshall  <keithmarshall@users.sourceforge.net>
2327
2328         Handle "*" wildcard matches in package and subsystem version strings.
2329
2330         * src/vercmp.h (pkgVersionInfo::version_string): New private member
2331         variable; it stores a pointer to a dynamically allocated local copy of
2332         the invariant `version' argument, to facilitate correct parsing.
2333         (pkgVersionInfo::build_string): Likewise; it provides similar handling
2334         for the invariant `build' argument.
2335         (pkgVersionInfo::Free): New private inline method; it provides a NULL
2336         pointer safe wrapper, calling the C library `free()' function, (since
2337         some implementations are believed to be unsafe); it is used by...
2338         (pkgVersionInfo::~pkgVersionInfo): ...this new inline destructor, to
2339         release the memory allocated by the constructor, for `version_string'
2340         and `build_string'.
2341
2342         * src/vercmp.cpp (pkgVersionInfo::pkgVersionInfo): Allocate memory for
2343         `version_string' and `build_string', as required; populate it.
2344         Explicitly handle "*" as a `match anything' wildcard...
2345         (pkgVersionInfo::Compare): ...matching it as `equal' to everything.
2346
2347 2010-04-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
2348
2349         Correct omission from configure script prerequisite checks.
2350
2351         * aclocal.m4 (MINGW_AC_OUTPUT): New macro; it wraps AC_OUTPUT itself,
2352         adding a trap to force an abort if any preceding prerequisite check
2353         was handled by MINGW_AC_ASSERT_MISSING.
2354
2355         * configure.ac: Qualify package component types, in prerequisite
2356         checks handled by MINGW_AC_ASSERT_MISSING; invoke MINGW_AC_OUTPUT
2357         in place of AC_OUTPUT.
2358
2359 2010-04-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2360
2361         Add configure script checks for prerequisite library headers.
2362         (Thanks to Cesar Strauss for proposing a rudimentary implementation).
2363
2364         * aclocal.m4: New file; it does no more than include...
2365         * m4/missing.m4: ...this; new file incorporated from build-aux module.
2366
2367         * configure.ac: Add AC_CHECK_HEADER assertions for...
2368         (zlib.h, bzlib.h, lzma.h): ...these; invoke MINGW_AC_ASSERT_MISSING in
2369         respect of each failing assertion.
2370
2371 2010-04-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2372
2373         Case-insensitive subsystem name matching revisited.
2374
2375         * src/pkgfind.cpp (pkgXmlDocument::FindPackageByName): Use...
2376         (subsystem_strcmp): ...this to match subsystem names, instead of...
2377         (match_if_explicit): ...this.
2378
2379 2010-04-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
2380
2381         Enable recursive processing of repository package lists.
2382
2383         * src/pkgbase.h (pkgXmlDocument::SyncRepository): Make it public.
2384
2385         * src/pkgbind.cpp (pkgRepository): New locally defined and implemented
2386         class; it facilitates recursive loading and parsing of package lists,
2387         replacing much of the original non-recursive functionality within...
2388         (pkgXmlDocument::BindRepositories): ...this; use it.
2389
2390 2010-04-04  Keith Marshall  <keithmarshall@users.sourceforge.net>
2391
2392         Implement installer function; use per-package file manifests.
2393
2394         * src/pkgproc.h (pkgManifest): New class; declare it.
2395         (pkgArchiveProcessor::origin): New protected member variable.
2396         (pkgArchiveProcessor::sysroot_len): New protected member variable.
2397         (pkgArchiveProcessor::installed): Type changed to `pkgManifest *'.
2398         (pkgTarArchiveInstaller::Process): Declare specialisation hook.
2399         (pkgTarArchiveInstaller::UpdateInstallationManifest): Disused member
2400         function; remove redundant declaration from class definition.
2401         (pkgInstall): New generalised installation function; declare it.
2402         (pkgRegister): New function; declare it.
2403
2404         * src/pkginst.cpp: New file.
2405         (pkgManifest, pkgInstall, pkgRegister): Implement them.
2406
2407         * src/pkgexec.cpp (pkgActionItem::Execute): Use `pkgInstall' in place
2408         of stub formerly provided here.
2409
2410         * src/pkgkeys.h (manifest_key, reference_key): New keys; declare them.
2411         * src/pkgkeys.c (manifest_key, reference_key): Implement them.
2412
2413         * src/tarproc.cpp: Code refactored.
2414         (pkgTarArchiveProcessor::sysroot_len): Initialise it.
2415         (pkgTarArchiveProcessor::origin): Initialise it.
2416         (pkgTarArchiveProcessor::installed): Initialise; associate it with a
2417         pkgManifest class entity, and populate this as appropriate.
2418         (pkgTarArchiveProcessor::~pkgTarArchiveProcessor): Add explicit clean
2419         up of linked `pkgManifest *' entity referenced by `installed'.
2420         (pkgTarArchiveProcessor::Process) [TAR_ENTITY_TYPE_DIRECTORY]: Add
2421         braces to demarcate localised inner scope of string scan for removal
2422         of trailing directory name separators; (thanks to Cesar Strauss for
2423         reporting invalid local pointer declaration error in GCC >= 4.4).
2424         (pkgTarArchiveInstaller::UpdateInstallationManifest): Deleted.
2425         (pkgTarArchiveInstaller::pkgTarArchiveInstaller): Factor out.
2426         (pkgTarArchiveInstaller::ProcessDirectory): Likewise.
2427         (pkgTarArchiveInstaller::ProcessDataStream): Likewise.
2428         (commit_saved_entity): Likewise.
2429
2430         * src/tarinst.cpp: New file; it implements...
2431         (pkgTarArchiveInstaller::Process): ...this new specialisation
2432         of the original pkgTarArchiveProcessor::Process method...
2433         (pkgTarArchiveInstaller::pkgTarArchiveInstaller): ...and this
2434         refactored code, abstracted from src/tarproc.cpp and modified to
2435         use the pkgManifest class for installation tracking.
2436         (pkgTarArchiveInstaller::ProcessDirectory): Likewise.
2437         (pkgTarArchiveInstaller::ProcessDataStream): Likewise.
2438         (commit_saved_entity): Relocated from src/tarproc.cpp.
2439
2440         * Makefile.in (CORE_DLL_OBJECTS): Add...
2441         (pkginst.OBJEXT, tarinst.OBJEXT): ...these new object files.
2442
2443 2010-03-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
2444
2445         Guard against NULL pointer dereferences in tinyxml code.
2446
2447         * src/pkgbase.h (pkgXmlNode::GetName): Verify `this' pointer is
2448         non-NULL, before invoking the underlying tinyxml method.
2449         (pkgXmlNode::GetParent, pkgXmlNode::GetChildren): Likewise.
2450         (pkgXmlNode::GetNext, pkgXmlNode::GetPropVal): Likewise.
2451         (pkgXmlNode::AddChild, pkgXmlNode::DeleteChild): Likewise.
2452         (pkgXmlNode::GetDocumentRoot): Likewise.
2453         (pkgXmlNode::IsElementOfType): Likewise.
2454
2455 2010-03-28  Cesar Strauss  <cestrauss@gmail.com>
2456
2457         Avoid running InternetAttemptConnect in pkgInternetAgent
2458         constructor, since it is called during DLL initialisation.
2459
2460         * src/pkginet.cpp (pkgInternetAgent::pkgInternetAgent): Move the
2461         InternetAttemptConnect call from constructor...
2462         (pkgInternetAgent::OpenURL): ...to here.
2463
2464 2010-03-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
2465
2466         Automate object code dependency tracking.
2467
2468         * Makefile.in (DEPFLAGS): New macro; define it.
2469         (%.OBJEXT: %.c, %.OBJEXT: %.cpp): Add dependency generator commands...
2470         (%.d): ...to create these dependency maps; `sinclude' them, and...
2471         (clean): ...remove them.
2472         
2473         * .cvsignore (*.d): Add wild card template to match them.
2474
2475 2010-03-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
2476
2477         Support case insensitive matching for file and subsystem names.
2478
2479         * src/pkgbase.h (safe_strcmp): New inline function; it provides NULL
2480         argument safe comparison of strings, returning the boolean inverse of
2481         the `strcmp' result, using either case-sensitive or case-insensitive
2482         semantics; derive it from...
2483         (match_if_explicit): ...this; redefine as macro; invoke `safe_strcmp'
2484         using explicitly case-sensitive semantics.
2485         (subsystem_strcmp): New macro; it invokes `safe_strcmp' with either
2486         case-sensitive or case-insensitive semantics, depending on...
2487         (CASE_INSENSITIVE_SUBSYSTEMS): ...this new context selection macro; it
2488         fixes the choice between case-sensitive and case-insensitive matching
2489         semantics for any given implementation, at compile time.
2490         (pkg_strcmp): New macro; it invokes `safe_strcmp' with either
2491         case-sensitive or case-insensitive semantics, depending on...
2492         (CASE_INSENSITIVE_FILESYSTEM): ...this new context selection macro; it
2493         fixes the choice between case-sensitive and case-insensitive matching
2494         semantics for any given implementation, at compile time.
2495
2496         * src/sysroot.cpp (pkgXmlNode::GetSysRoot): Use `subsystem_strcmp'.
2497
2498 2010-03-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
2499
2500         Add preliminary support for virtual packages.
2501
2502         * src/pkgkeys.h (yes_value, no_value): Redefine as aliases...
2503         (value_yes, value_no): ...for these new global strings; declare them.
2504         (value_none, value_virtual): New global strings; declare them.
2505
2506         * src/pkgkeys.c (yes_value, no_value): Rename...
2507         (value_yes, value_no): ...to implement these, respectively.
2508         (value_none, value_virtual): Implement them.
2509
2510         * src/pkgname.cpp (pkgXmlNode::ArchiveName): Check containing package
2511         node for `class' attribute set to `value_virtual'; if present, always
2512         return the effective `tarname' property as `value_none'.
2513
2514         * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles): For packages
2515         with an effective `tarname' of `value_none', do not download anything.
2516
2517         * src/pkgexec.cpp (pkgActionItem::Execute): For packages with an
2518         effective `tarname' of `value_none', do not invoke any tar archive
2519         processing function.
2520
2521 2010-03-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
2522
2523         Don't write installation records for unavailable packages.
2524
2525         * src/tarproc.cpp (pkgTarArchiveInstaller): In constructor, ensure
2526         archive is ready for processing, before initialising an installation
2527         manifest record.
2528
2529 2010-03-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
2530
2531         Rationalise path identification for XML file locations.
2532
2533         * src/sysroot.cpp (pkgXmlDocument::LoadSystemMap): Use `xmlfile()'
2534         function to locate `sysroot' map file; free memory when done.
2535         (pkgXmlDocument::UpdateSystemMap): Likewise.
2536         (sigpath): Static global variable disused; delete it.
2537
2538 2010-03-01  Keith Marshall  <keithmarshall@users.sourceforge.net>
2539
2540         Extend package name search to include component packages.
2541
2542         * src/pkgfind.cpp (pkgHasMatchingName): Remove; fold it into...
2543         (pkgXmlNode::FindPackageByName): ...this; augment to extend search
2544         within package definition elements, seeking a potential match on an
2545         included component package name or component class-implied name.
2546
2547         * src/pkgkeys.h (class_key): New global string constant; declare it.
2548         * src/pkgkeys.c (class_key): Implement it.
2549
2550 2010-02-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2551
2552         Bump version for next release cycle.
2553
2554         * configure.ac (AC_INIT): Bump version suffix to alpha-2.
2555
2556 2010-02-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2557
2558         mingw-get-0.1-mingw32-alpha-1 released.
2559
2560 2010-02-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2561
2562         Prepare initial package release.
2563
2564         * README: New file; use it to source release notes.
2565
2566         * Makefile.in (SRCDIST_FILES): Use ...
2567         (LICENCE_FILES): ...this new macro; define it.
2568         (licdist): New build goal; implement it.
2569         (bindist): Require it; add alternative `zip' format package.
2570
2571         * xml/profile.xml (repository): Set default `package-index' name.
2572         (system-map): Normalise spelling for default `sysroot' path names.
2573
2574 2010-02-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
2575
2576         Add directory/file records in installation manifests.
2577
2578         * src/pkgkeys.h (dirname_key, filename_key): New strings; declare...
2579         * src/pkgkeys.c (dirname_key, filename_key): ...and implement them.
2580
2581         * src/pkgproc.h (pkgArchiveProcessor::installed): New class member
2582         variable; declare it.
2583         (pkgTarArchiveInstaller::UpdateInstallationManifest): New method;
2584         declare it.
2585
2586         * src/tarproc.cpp: Miscellaneous comment updates.
2587         (pkgTarArchiveInstaller): In constructor...
2588         (pkgTarArchiveInstaller::installed): ...use new member variable...
2589         (pkgArchiveProcessor::installed): ...inherited from this.
2590         (pkgTarArchiveInstaller::UpdateInstallationManifest): Implement and...
2591         (pkgTarArchiveInstaller::ProcessDataStream): ...use it.
2592         (pkgTarArchiveInstaller::ProcessDirectory): Likewise.
2593
2594 2010-02-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
2595
2596         Work around a deficiency in Microsoft's stat() implementation.
2597
2598         * src/tarproc.cpp (pkgTarArchiveProcessor::ProcessDirectory): Don't
2599         pass a `pathname' argument with trailing slashes; strip them off.
2600
2601 2010-02-06  Keith Marshall  <keithmarshall@users.sourceforge.net>
2602
2603         Add machinery for installation and packaging for distribution.
2604
2605         * install-sh: New file; source it from autoconf distribution.
2606
2607         * configure.ac (AC_PREFIX_DEFAULT): Assign it as `C:/MinGW'.
2608         (AC_PROG_MKDIR_P, AC_PROG_INSTALL, AC_PROG_LN_S): Invoke these.
2609         (STRIP): New output variable; use AC_CHECK_TOOL to define it.
2610
2611         * Makefile.in (abs_top_srcdir): Define to AC_SUBST value.
2612         (PACKAGE_TARNAME, PACKAGE_VERSION): Define to AC_SUBST values.
2613         (prefix, exec_prefix, bindir, libexecdir, localstatedir): Likewise.
2614         (INSTALL, INSTALL_PROGRAM, INSTALL_SCRIPT, INSTALL_DATA): Likewise.
2615         (STRIP): New macro; define it using AC_CHECK_TOOL substitution.
2616         (mkinstalldirs): New macro; define it as AC_PROG_MKDIR_P result.
2617         (LN_S): New macro; define it as AC_PROG_LN_S result.
2618         (dist, srcdist, bindist): New build objectives; implement them.
2619         (install, installdirs, install-strip, maintainer-clean): Likewise.
2620         (SRCDIST_FILES, SRCDIST_SUBDIRS): New macros; define them.
2621         (PACKAGE_DISTNAME, PACKAGE_DISTVERSION): Likewise.
2622         (PACKAGE_DISTROOT, PACKAGE_ROOTVERSION): Likewise.
2623         (PACKAGE_CONFIG_DIR): Likewise.
2624
2625 2010-02-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
2626
2627         Implement package installer for tar archives.
2628
2629         * src/pkgexec.cpp (pkgXmlDocument::Execute): Replace existing
2630         stub implementation of installer, using methods provided by...
2631         * src/pkgproc.h, src/tarproc.cpp: ...these new files, with trap...
2632         * src/pkgdeps.cpp (pkgXmlDocument::Schedule) [installed]: Add entry...
2633         (pkgActionItem::Selection) [to_remove]: ...for this; use it to detect
2634         `install' requests for packages which are aleady installed.
2635
2636         * Makefile.in (CORE_DLL_OBJECTS): Add tarproc.$(OBJEXT); specify
2637         dependencies as appropriate.
2638
2639         * src/sysroot.cpp (pkgXmlDocument::LoadSystemMap): Don't commit
2640         newly created `sysroot' mapping records to disk; defer to...
2641         (pkgXmlDocument::UpdateSystemMap): ...this new method.
2642         (sigpath): Make it a global variable, with file (static) scope.
2643
2644         * src/climain.cpp (pkgXmlDocument::UpdateSystemMap): Invoke it.
2645
2646         * src/pkgkeys.h (download_key, modified_key, source_key): New global
2647         string variables; declare them, providing their implementations...
2648         * src/pkgkeys.c (download_key, modified_key, source_key): ...here.
2649         * src/pkgname.cpp (download_key, source_key): Use them.
2650
2651         * src/pkginet.cpp (pkgActionItem::ArchivePath): Delete; replace...
2652         * src/mkpath.c (pkgArchivePath): ...with this free standing function.
2653         * src/mkpath.h (pkgArchivePath): Declare its prototype.
2654
2655         * src/pkgbase.h (pkgActionItem::ArchivePath): Delete declaration.
2656         (pkgXmlDocument): Add a default constructor; implement as `inline'.
2657         (pkgXmlDocument::AddDeclaration): Use heap memory to allocate the new
2658         declaration object, instead of `auto' variable, to avoid scope error.
2659         (pkgXmlDocument::UpdateSystemMap): Declare it.
2660
2661 2010-01-26  Keith Marshall  <keithmarshall@users.sourceforge.net>
2662
2663         Implement rudimentary dependency resolver.
2664
2665         * src/pkgdeps.cpp: New file.
2666
2667         * Makefile.in (CORE_DLL_OBJECTS): Add pkgdeps.$(OBJEXT) reference;
2668         establish header file dependencies.
2669
2670         * src/pkgbase.h (to_remove, to_install, selection_types): New enum.
2671         (pkgActionItem::selection): Extend it to store as enumerated pair...
2672         (pkgActionItem::SelectPackage): New inline method; assign them.
2673         (pkgActionItem::Selection): New inline method; retrieve them.
2674         (pkgXmlNode::GetInstallationRecord): New method; declare it.
2675
2676         * src/pkgexec.cpp (pkgActionItem): In constructor...
2677         (selection): ...initialise both references in enumerated pair.
2678         (pkgActionItem::GetReference): Use `Selection()' method.
2679         (pkgActionItem::SelectIfMostRecent): Ditto; also correct logic for
2680         making selection, and assign to `to_install' element.
2681         (pkgXmlDocument::Schedule): Don't update `request'.
2682         (pkgActionItem::Execute): Implement as stub.
2683
2684         * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles): Use new
2685         `Selection()' method.
2686
2687         * src/pkgkeys.h (yes_value, no_value): Declare new string constants.
2688         * src/pkgkeys.c (yes_value, no_value): Implement them.
2689
2690         * src/vercmp.cpp: Update copyright notice.
2691         (pkgVersionInfo::operator<=): Bug fix; must test for `<', but had `>'.
2692
2693 2010-01-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
2694
2695         Avoid segmentation faults when processing invalid data streams.
2696
2697         * src/pkgstrm.h: Update copyright notice.
2698         (pkgArchiveStream::IsReady): New pure virtual method.
2699         (pkgRawArchiveStream::IsReady): Provide inline implementation.
2700         (pkgGzipArchiveStream::IsReady): Likewise.
2701         (pkgBzipArchiveStream::IsReady): Likewise.
2702         (pkgLzmaArchiveStream::IsReady): Likewise.
2703         (pkgXzArchiveStream::IsReady): Likewise.
2704
2705         * src/pkgstrm.cpp: Update copyright notice.
2706         (pkgLzmaArchiveStream, pkgXzArchiveStream) [fd == -1]: Decline to
2707         perform any form of read or decode processing.
2708
2709         * src/pkginet.cpp (pkgInternetLzmaStreamingAgent): Use `fd = -2' as
2710         pseudo-descriptor for the pkgLzmaArchiveStream derived component of
2711         this internet data streaming class.
2712
2713 2010-01-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
2714
2715         Require liblzma >= liblzma-4.999.9beta_20091209-3-mingw32-dev
2716
2717         * src/pkgstrm.h (LZMA_API_STATIC): Remove definition and associated
2718         comment; it was required to permit, (but not to enforce), linking to
2719         the static liblzma.a library, with earlier beta releases, but this
2720         anomaly has now been corrected.
2721
2722 2010-01-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
2723
2724         Remove zlib sources from trunk.
2725         (Application builders should use free standing implementation of
2726          zlib, from MinGW's package distribution page on SourceForge).
2727
2728 2010-01-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
2729
2730         Remove bzip2 sources from trunk.
2731         (Application builders should use free standing implementation of
2732          bzip2, from MinGW's package distribution page on SourceForge).
2733
2734 2010-01-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
2735
2736         Add subsystem specific sysroot mapping facility.
2737
2738         * src/pkghash.c: New file; required by...
2739         * src/sysroot.cpp: New file; it implements...
2740         (pkgXmlDocument::LoadSystemMap, pkgXmlNode::GetSysRoot): New methods.
2741
2742         * src/pkgbase.h: Update copyright notice.
2743         (pkgXmlDocument::LoadSystemMap): Declare it.
2744         (pkgXmlDocument::AddDeclaration): New inline method.
2745         (pkgXmlDocument::SetRoot, pkgXmlDocument::Save): Likewise.
2746         (pkgXmlNode::GetSysRoot): Declare it.
2747         (pkgXmlNode::GetDocumentRoot): New inline method.
2748         (pkgXmlNode::AddChild, pkgXmlNode::DeleteChild): Likewise.
2749
2750         * src/climain.cpp: Update copyright notice.
2751         (climain): Invoke pkgXmlDocument::LoadSystemMap() as required.
2752
2753         * Makefile.in (CORE_DLL_OBJECTS): Add ...
2754         (pkghash.$(OBJEXT), sysroot.$(OBJEXT)): ...these; upate dependencies.
2755         (DEBUGLEVEL): New macro; define it.
2756         (CPPFLAGS): Use it.
2757
2758 2010-01-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2759
2760         Assign standardised keys for XML database lookup.
2761
2762         * src/pkgkeys.h: New file; provide public key declarations.
2763         * src/pkgkeys.c: New file; implement them.
2764
2765         * src/pkgbind.cpp: Use them; update copyright notice.
2766         * src/pkgexec.cpp, src/pkgfind.cpp, src/pkginet.cpp: Likewise.
2767         * src/pkgname.cpp, src/pkgspec.cpp: Likewise.
2768
2769         * Makfile.in (CORE_DLL_OBJECTS): Add pkgkeys.$(OBJEXT); update all
2770         dependencies accordingly.
2771
2772 2010-01-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
2773
2774         Add CLI version reporting option.
2775
2776         * configure.ac: Update copyright notice for new year.
2777         (COPYRIGHT_HOLDER): New AC_SUBST variable; define it.
2778         (YEARS_OF_ISSUE): New AC_SUBST variable; define it.
2779         (AC_CONFIG_FILES): Add `version.c'; source it from...
2780
2781         * version.c.in: ...this new file.
2782
2783         * Makefile.in: Update copyright notice for new year.
2784         (mingw-get$(EXEEXT)): Add dependency on `version.$(OBJEXT)'.
2785         (distclean): Add `version.c'.
2786
2787         * configure: Regenerated.
2788
2789         * src/clistub.c: Update copyright notice for new year.
2790         (options): New array of `struct option'; define and use it as the
2791         reference for `argv' parsing with `getopt_long_only()'.
2792
2793 2009-12-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
2794
2795         Add CLI support for "update" action.
2796
2797         * src/pkgtask.h (ACTION_UPDATE): Define it, derived from...
2798         (action_update): ...this new entry in anonymous enumeration.
2799         
2800         * src/pkgexec.cpp (action_name): Add "update" keyword identification.
2801
2802         * src/pkgbase.h: Typo in comment; s/xwXmlDocument/wxXmlDocument/.
2803         (pkgXmlDocument::BindRepositories): Add `force_update' parameter...
2804         * src/pkgbind.cpp (pkgXmlDocument::BindRepositories): Use it to...
2805         (pkgXmlDocument::SyncRepository): ...invoke this method when passed as
2806         a `true' flag, in addition to (as previously) first time reference.
2807
2808         * src/climain.cpp (climain): Interpret "update" keyword for...
2809         [ACTION_UPDATE]: ...passing state as `force_update' parameter to...
2810         (pkgXmlDocument::BindRepositories): ...this method, then...
2811         [!ACTION_UPDATE]: Follow with normal action processing.
2812
2813 2009-12-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2814
2815         Add status checking for Internet URL connections.
2816
2817         * src/pkginet.cpp (pkgInternetAgent::QueryStatus): New method.
2818         (pkgInternetStreamingAgent::Get): Use it; set `dl_status' as return
2819         value, deferring failure diagnostics to callers, i.e. to...
2820         (pkgXmlDocument::SyncRepositories): ...this, and to...
2821         (pkgActionItem::DownloadArchiveFiles): ...this.
2822
2823 2009-11-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
2824
2825         Add package download and repository synchronisation machinery.
2826
2827         * src/pkgstrm.h: New header file.
2828
2829         * src/pkgbind.cpp, src/pkginet.cpp, src/pkgstrm.cpp,
2830         src/pkgfind.cpp, src/pkgname.cpp, src/keyword.c: New files.
2831         * Makefile.in (CORE_DLL_OBJECTS): Add build goals for them.
2832
2833         * xml: New directory.
2834
2835         * src/climain.cpp (climain): Establish repository bindings from...
2836         * xml/profile.xml: ...this new configuration file.
2837
2838 2009-11-16  Keith Marshall  <keithmarshall@users.sourceforge.net>
2839
2840         Add XML database bindings and preliminary action executive for CLI.
2841
2842         * src/pkgbase.h, src/pkgtask.h,
2843         src/mkpath.h, src/vercmp.h: New header files.
2844
2845         * src/climain.cpp, src/pkgexec.cpp, src/pkgspec.cpp,
2846         src/mkpath.c, src/vercmp.cpp, src/xmlfile.c: New files.
2847
2848         * Makefile.in (CORE_DLL_OBJECTS): Define initial set of files...
2849         (mingw-get-0.dll): ...build them into this new DLL target; add it...
2850         (all): ...as prerequisite for this primary build goal.
2851
2852 2009-11-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
2853
2854         Avoid some potential GCC warnings.
2855
2856         * src/clistub.c: Include process.h for `execv' prototype...
2857         (main): Cast `argv' to appropriately matched type when calling it.
2858
2859         * src/pkginfo/driver.c: Include stdlib.h for `free' prototype.
2860
2861 2009-11-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
2862
2863         Create diagnostic message handler for CLI usage.
2864
2865         * src/dmh.h: New header file; it defines the public interface.
2866         * src/dmh.cpp: New file; it implements the message handler.
2867
2868 2009-11-05  Keith Marshall  <keithmarshall@users.sourceforge.net>
2869
2870         Correct some identified TinyXML issues.
2871
2872         * tinyxml/tinyxml.h (IsWhiteSpace): Add FIXME annotation to flag
2873         probable redundancy of checks for '\n' and '\r'.
2874         * tinyxml/tinyxmlparser.cpp: Revert John E's 2008-08-09 change; remove
2875         all such redundancies in IsWhiteSpace() calls throughout.
2876
2877         * tinyxml/tinyxml.cpp (TiXmlAttribute::SetDoubleValue): Correct format
2878         specification in sprintf()/snprintf() calls; "%lf" is invalid; replace
2879         with "%f".
2880
2881 2009-10-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
2882
2883         Add CLI loader stub.
2884
2885         * src/clistub.c: New file.
2886         * Makefile.in: Add build rule for it; build as...
2887         (mingw-get.exe): ...this; also add to...
2888         (clean): ...this goal.
2889
2890 2009-10-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
2891
2892         Set up build mechanism.
2893
2894         * configure.ac, Makefile.in: New files.
2895         * .cvsignore (configure, autom4te.cache): Add to ignored files.
2896
2897 2009-10-30  Keith Marshall  <keithmarshall@users.sourceforge.net>
2898
2899         Add GPL-v3 licensing terms.
2900
2901         * COPYING: New file, sourced from gnu.org.
2902
2903 2009-10-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
2904
2905         Add pkginfo implementation.
2906
2907         * src, src/pkginfo: New directories.
2908         * src/pkginfo/pkginfo.h, src/pkginfo/pkginfo.l: New files.
2909         * src/pkginfo/driver.c: New file.
2910
2911 2009-10-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
2912
2913         Create tdm-branch.
2914
2915         * All files (tdm-branch): Assign new branch tag.
2916         * All top-level files: Remove from trunk.
2917         * ChangeLog: New file.