OSDN Git Service

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