OSDN Git Service

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