OSDN Git Service

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