OSDN Git Service

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