OSDN Git Service

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