2010-09-10 Charles Wilson Fix "mingw-get deletes itself" bug in last rites handling. * README: Add new release notes. * configure.ac: Bump version to 0.1-alpha-4. * src/dmh.h: If __cplusplus, include and declare dmh_exception class. * src/dmh.cpp (class dmh_exception): Implement. (abort_if_fatal): If DMH_FATAL, throw dmh_exception rather than calling exit(). * src/climain.cpp (climain): Wrap entry function body in try/ catch block. If dmh_exception is caught, return EXIT_FAILURE. * src/clistub.c (main): Capture return value of climain(). If non-zero, perform last rites and return EXIT_FAILURE. 2010-08-30 Keith Marshall mingw-get-0.1-mingw32-alpha-3 released. * README: Add new release notes. * All files (r0-1-alpha-3): Tag assigned. 2010-08-27 Keith Marshall Add runtime hooks to support self-upgrade for future releases. * src/rites.c: New file; compile it free-standing, to provide... (lastrites.exe): ...this helper application for context clean-up; alternatively, use it as an include file, with pre-definition of... (IMPLEMENT_INITIATION_RITES): ...this, to implement... (pkgInitRites, pkgLastRites): ...these inline functions. * src/clistub.c (main) [argc > 1]: Use them. (progname): New local variable within `main'; set it once, then use it instead of repeated references to `basename(*argv)' in diagnostics. (MINGW_GET_DLL, MINGW_GET_GUI): Relocate to `src/rites.c'. * src/debug.h (DEBUG_INHIBIT_RITES_OF_PASSAGE): (DEBUG_FAIL_FILE_RENAME_RITE, DEBUG_FAIL_FILE_UNLINK_RITE): New defines; they facilitate debugging of the src/rites.c code. * Makefile.in (lastrites$EXEEXT): New target; build as prerequisite... (all): ...of this primary target. (install, install-strip): Install it. (SRCDIST_FILES): Remove install-sh; it is now included in... (build-aux): ...this directory; add it to... (SRCDIST_SUBDIRS): ...this. 2010-08-24 Keith Marshall Set default sysroots relative to mingw-get installation directory. * xml/profile.xml (system-map) [name == default]: For each of... [subsystem == mingw32]: ...set sysroot path to value of %R macro... [subsystem == msys]: ...and to its %R/msys/1.0 subdirectory. 2010-08-19 Keith Marshall Some dependency resolver enhancements and bug fixes. * src/pkgbase.h (pkgXmlNode::GetContainerAttribute): New method; declare it. * src/pkgdeps.cpp (pkgXmlNode::GetContainerAttribute): Implement it; it is used to retrieve package name attributes from the containing 'package' element, when given a pointer to a 'release' element by... (assert_unmatched, assert_installed): ...these new static functions. (pkgXmlDocument::Schedule): Use them to reconstruct and register dependency reference data for previously installed packages which are no longer included in the distribution manifest. (pkgXmlDocument::ResolveDependencies): Fix a block nesting error; catch and diagnose unresolved dependencies; don't look beyond the XML document root node, (tinyxml error not caught?), when searching for requirements specified on container nodes. 2010-08-17 Keith Marshall Improve scheduling of package processing requests. * src/pkgexec.cpp (pkgXmlDocument::Schedule): Inspect entire `actions' list, when checking for duplicate package processing requests; decline to schedule any such duplicate, or any request which lacks a package association. 2010-08-15 Keith Marshall Lay foundation for selective compilation of debugging code. * src/debug.h: New file... * src/sysroot.cpp: Include it. (pkgXmlDocument::LoadSystemMap): Make debugging output conditional... [DEBUGLEVEL & DEBUG_TRACE_INIT]: ...on this new debugging state. 2010-08-15 Keith Marshall * src/pkgkeys.h: Typo in comment: file was previously identified as pkgkeys.c; corrected. 2010-08-13 Keith Marshall Improve diagnostics for invalid references to non-release XML nodes. * src/pkgkeys.h (value_unknown): New global string; declare it. * src/pkgkeys.c (value_unknown): Implement it. * src/pkgname.cpp (pkgArchiveName): Identify XML element type when diagnosing references to elements of types other than release; use... (value_unknown): ...this, as appropriate. 2010-08-12 Keith Marshall Guard against a potential buffer overrun. * src/pkgreqs.cpp (pkgSpecs::SetProperty): Allocate an additional byte to accommodate an extra field separator, when inserting a new data value into a previously empty field. 2010-07-27 Cesar Strauss Handle the GNU long name tar header format. * src/pkgproc.h (TAR_ENTITY_TYPE_GNU_LONGNAME): New manifest constant; define it. (pkgTarArchiveProcessor::EntityDataAsString): New protected method; declare and... * src/tarproc.cpp: ...implement it. (pkgTarArchiveProcessor::Process): Before building the entry pathname, check for a GNU long name type header; when found, read pathname from the entry data area, before fetching the following header, from which to retrieve the associated entity data. 2010-06-24 Keith Marshall Work around an autoconf bug (reported by Stefano Sabatini). * Makefile.in (VPATH): Use @top_srcdir@ instead of ${srcdir}; current autoconf incorrectly elides references to @srcdir@ and ${srcdir} when substituting within a VPATH specification for building `in-source'. Also, prefer colons to blanks as path name separators, for improved portability to non-GNU implementations of make; (recommendation by Ralf Wildenhues). 2010-06-24 Keith Marshall Include alias search, when matching component package name. * src/keyword.c (has_keyword): Rearrange argument declarations for more natural order; update all callers accordingly. Simplify; compare keyword to be matched with each successive candidate from match-list, character-by-character and in-place, so avoiding memory allocation for any local duplicate of the passed match-list; thus... (safe_strdup): ...this static function no longer required; delete it. (string.h): No references remain; do not include it. * src/pkgfind.cpp (pkgXmlNode::FindPackageByName): Augment component package name matching to include potential matches of the look-up name with trailing component name stripped off, when that matches the class name of an identified component package, and the initial substring of the look-up name, after stripping, matches any specified alias name for the containing package. 2010-06-10 Keith Marshall Address FIXME relating to identification of distributable files. * install-sh: Move to... * build-aux: ...this new directory. * Makefile.in (PACKAGE_DISTVERSION): Modify `sed' edit sequence; make it depend on, and ensure that it incorporates the expansion of... (PACKAGE_SUBSYSTEM): ...this new macro; defined as substitution of... (host_os): ...this autoconf variable, set by... * configure.ac (AC_CANONICAL_HOST): ...this; add it, requiring... (AC_CONFIG_AUX_DIR): ...`build-aux' directory reference, providing... * build-aux/config.guess, build-aux/config.sub: ...these new standard files; import them from the standard `build-aux' repository. 2010-05-17 Keith Marshall Bump version for next release cycle. * configure.ac (AC_INIT): Bump version suffix to alpha-3. 2010-05-17 Keith Marshall mingw-get-0.1-mingw32-alpha-2 released. * README: Add new release notes. * xml/profile.xml: Update to use default referencing for... (package-list.xml.lzma): ...this repository master catalogue. * All files (r0-1-alpha-2): Tag assigned. 2010-05-12 Keith Marshall Make provision to protect user's profile settings during upgrade. * Makefile.in (install): Remove `profile.xml'; replace it with... (install-profile): ...this new prerequisite installation goal; it renames the installed copy of `profile.xml' as `defaults.xml', within the installed package image. * src/pkgkeys.h (defaults_key): New key; declare it. * src/pkgkeys.c: Some cosmetic formatting (tabulation) adjustments. (defaults_key): Implement it; it refers to the `defaults.xml' file. * src/climain.cpp (climain): Check `profile_key' for accessibility of the `profile.xml' file; if [! R_OK] emit a diagnostic warning, fall back on `defaults_key', and attempt to load configuration from the distributed `defaults.xml' file. 2010-05-11 Keith Marshall Add preliminary support for future `-reinstall' option. * src/pkgexec.cpp (pkgActionItem::Execute) [ACTION_INSTALL]: Force installation if `-reinstall' option is selected, overriding state of any prior installation; temporarily assume that this option is always selected, to permit proper `upgrade' operation in the absence of any functional `uninstall' capability, and pending implementation of a mechanism for interpreting user specified options. 2010-05-11 Keith Marshall Correct handling for "%R" macro in relative sysroot path specs. * src/tarproc.cpp (pkgTarArchiveProcessor): In constructor, expand the sysroot path specification a second time, to capture the effect of any embedded macros, before computing the recorded `sysroot_len' value. 2010-05-05 Keith Marshall Handle "%" wildcard matches in package and subsystem version strings. * src/pkgbase.h (pkgSpecs): Forward declare it. (pkgActionItem::~pkgActionItem): Declare explicit destructor. (pkgActionItem::SetRequirements): Add extra `pkgSpecs*' argument; update references, passing additional argument in... * src/pkgdeps.cpp (pkgXmlDocument::ResolveDependencies): ...this. * src/pkgexec.cpp (pkgActionItem::~pkgActionItem): Implement it. (pkgActionItem::SetRequirements): Delete obsolete implementation. * src/pkginfo/pkginfo.h: Update copyright notice; add year 2010. (pkgSpecs::GetTarName): New public method; declare it. (pkgSpecs::SetProperty): New private method; declare it. (pkgSpecs::SetPackageName): New inline method; implement it. (pkgSpecs::SetPackageVersion, pkgSpecs::SetPackageBuild): Likewise. (pkgSpecs::SetSubSystemName, pkgSpecs::SetSubSystemVersion): Likewise. (pkgSpecs::SetSubSystemBuild, pkgSpecs::SetReleaseStatus): Likewise. (pkgSpecs::SetReleaseIndex, pkgSpecs::SetComponentClass): Likewise. (pkgSpecs::SetComponentVersion, pkgSpecs::SetPackageFormat): Likewise. (pkgSpecs::SetCompressionType): Likewise. * src/pkginfo/pkginfo.l: Update copyright notice; add year 2010. (TRANS): Interpret "%" as wildcard in version string matches. * src/pkgreqs.cpp: New file. (pkgActionItem::SetRequirements): Reimplement per new declaration; it now always allocates heap memory for requirements specifications. (pkgSpecs::GetTarName, pkgSpecs::SetProperty): Implement them. * Makefile.in (CORE_DLL_OBJECTS): Add `pkgreqs.$(OBJEXT)'. 2010-04-30 Keith Marshall Revert 2010-04-04 refactoring of tarproc.cpp and tarinst.cpp * src/tarinst.cpp: File removed; its content merged into... * src/tarproc.cpp: ...this; it cannot be cleanly separated out. * Makefile.in (tarinst.$OBJEXT): Remove reference. 2010-04-29 Keith Marshall Handle "*" wildcard matches in package and subsystem version strings. * src/vercmp.h (pkgVersionInfo::version_string): New private member variable; it stores a pointer to a dynamically allocated local copy of the invariant `version' argument, to facilitate correct parsing. (pkgVersionInfo::build_string): Likewise; it provides similar handling for the invariant `build' argument. (pkgVersionInfo::Free): New private inline method; it provides a NULL pointer safe wrapper, calling the C library `free()' function, (since some implementations are believed to be unsafe); it is used by... (pkgVersionInfo::~pkgVersionInfo): ...this new inline destructor, to release the memory allocated by the constructor, for `version_string' and `build_string'. * src/vercmp.cpp (pkgVersionInfo::pkgVersionInfo): Allocate memory for `version_string' and `build_string', as required; populate it. Explicitly handle "*" as a `match anything' wildcard... (pkgVersionInfo::Compare): ...matching it as `equal' to everything. 2010-04-18 Keith Marshall Correct omission from configure script prerequisite checks. * aclocal.m4 (MINGW_AC_OUTPUT): New macro; it wraps AC_OUTPUT itself, adding a trap to force an abort if any preceding prerequisite check was handled by MINGW_AC_ASSERT_MISSING. * configure.ac: Qualify package component types, in prerequisite checks handled by MINGW_AC_ASSERT_MISSING; invoke MINGW_AC_OUTPUT in place of AC_OUTPUT. 2010-04-17 Keith Marshall Add configure script checks for prerequisite library headers. (Thanks to Cesar Strauss for proposing a rudimentary implementation). * aclocal.m4: New file; it does no more than include... * m4/missing.m4: ...this; new file incorporated from build-aux module. * configure.ac: Add AC_CHECK_HEADER assertions for... (zlib.h, bzlib.h, lzma.h): ...these; invoke MINGW_AC_ASSERT_MISSING in respect of each failing assertion. 2010-04-17 Keith Marshall Case-insensitive subsystem name matching revisited. * src/pkgfind.cpp (pkgXmlDocument::FindPackageByName): Use... (subsystem_strcmp): ...this to match subsystem names, instead of... (match_if_explicit): ...this. 2010-04-15 Keith Marshall Enable recursive processing of repository package lists. * src/pkgbase.h (pkgXmlDocument::SyncRepository): Make it public. * src/pkgbind.cpp (pkgRepository): New locally defined and implemented class; it facilitates recursive loading and parsing of package lists, replacing much of the original non-recursive functionality within... (pkgXmlDocument::BindRepositories): ...this; use it. 2010-04-04 Keith Marshall Implement installer function; use per-package file manifests. * src/pkgproc.h (pkgManifest): New class; declare it. (pkgArchiveProcessor::origin): New protected member variable. (pkgArchiveProcessor::sysroot_len): New protected member variable. (pkgArchiveProcessor::installed): Type changed to `pkgManifest *'. (pkgTarArchiveInstaller::Process): Declare specialisation hook. (pkgTarArchiveInstaller::UpdateInstallationManifest): Disused member function; remove redundant declaration from class definition. (pkgInstall): New generalised installation function; declare it. (pkgRegister): New function; declare it. * src/pkginst.cpp: New file. (pkgManifest, pkgInstall, pkgRegister): Implement them. * src/pkgexec.cpp (pkgActionItem::Execute): Use `pkgInstall' in place of stub formerly provided here. * src/pkgkeys.h (manifest_key, reference_key): New keys; declare them. * src/pkgkeys.c (manifest_key, reference_key): Implement them. * src/tarproc.cpp: Code refactored. (pkgTarArchiveProcessor::sysroot_len): Initialise it. (pkgTarArchiveProcessor::origin): Initialise it. (pkgTarArchiveProcessor::installed): Initialise; associate it with a pkgManifest class entity, and populate this as appropriate. (pkgTarArchiveProcessor::~pkgTarArchiveProcessor): Add explicit clean up of linked `pkgManifest *' entity referenced by `installed'. (pkgTarArchiveProcessor::Process) [TAR_ENTITY_TYPE_DIRECTORY]: Add braces to demarcate localised inner scope of string scan for removal of trailing directory name separators; (thanks to Cesar Strauss for reporting invalid local pointer declaration error in GCC >= 4.4). (pkgTarArchiveInstaller::UpdateInstallationManifest): Deleted. (pkgTarArchiveInstaller::pkgTarArchiveInstaller): Factor out. (pkgTarArchiveInstaller::ProcessDirectory): Likewise. (pkgTarArchiveInstaller::ProcessDataStream): Likewise. (commit_saved_entity): Likewise. * src/tarinst.cpp: New file; it implements... (pkgTarArchiveInstaller::Process): ...this new specialisation of the original pkgTarArchiveProcessor::Process method... (pkgTarArchiveInstaller::pkgTarArchiveInstaller): ...and this refactored code, abstracted from src/tarproc.cpp and modified to use the pkgManifest class for installation tracking. (pkgTarArchiveInstaller::ProcessDirectory): Likewise. (pkgTarArchiveInstaller::ProcessDataStream): Likewise. (commit_saved_entity): Relocated from src/tarproc.cpp. * Makefile.in (CORE_DLL_OBJECTS): Add... (pkginst.OBJEXT, tarinst.OBJEXT): ...these new object files. 2010-03-31 Keith Marshall Guard against NULL pointer dereferences in tinyxml code. * src/pkgbase.h (pkgXmlNode::GetName): Verify `this' pointer is non-NULL, before invoking the underlying tinyxml method. (pkgXmlNode::GetParent, pkgXmlNode::GetChildren): Likewise. (pkgXmlNode::GetNext, pkgXmlNode::GetPropVal): Likewise. (pkgXmlNode::AddChild, pkgXmlNode::DeleteChild): Likewise. (pkgXmlNode::GetDocumentRoot): Likewise. (pkgXmlNode::IsElementOfType): Likewise. 2010-03-28 Cesar Strauss Avoid running InternetAttemptConnect in pkgInternetAgent constructor, since it is called during DLL initialisation. * src/pkginet.cpp (pkgInternetAgent::pkgInternetAgent): Move the InternetAttemptConnect call from constructor... (pkgInternetAgent::OpenURL): ...to here. 2010-03-23 Keith Marshall Automate object code dependency tracking. * Makefile.in (DEPFLAGS): New macro; define it. (%.OBJEXT: %.c, %.OBJEXT: %.cpp): Add dependency generator commands... (%.d): ...to create these dependency maps; `sinclude' them, and... (clean): ...remove them. * .cvsignore (*.d): Add wild card template to match them. 2010-03-22 Keith Marshall Support case insensitive matching for file and subsystem names. * src/pkgbase.h (safe_strcmp): New inline function; it provides NULL argument safe comparison of strings, returning the boolean inverse of the `strcmp' result, using either case-sensitive or case-insensitive semantics; derive it from... (match_if_explicit): ...this; redefine as macro; invoke `safe_strcmp' using explicitly case-sensitive semantics. (subsystem_strcmp): New macro; it invokes `safe_strcmp' with either case-sensitive or case-insensitive semantics, depending on... (CASE_INSENSITIVE_SUBSYSTEMS): ...this new context selection macro; it fixes the choice between case-sensitive and case-insensitive matching semantics for any given implementation, at compile time. (pkg_strcmp): New macro; it invokes `safe_strcmp' with either case-sensitive or case-insensitive semantics, depending on... (CASE_INSENSITIVE_FILESYSTEM): ...this new context selection macro; it fixes the choice between case-sensitive and case-insensitive matching semantics for any given implementation, at compile time. * src/sysroot.cpp (pkgXmlNode::GetSysRoot): Use `subsystem_strcmp'. 2010-03-02 Keith Marshall Add preliminary support for virtual packages. * src/pkgkeys.h (yes_value, no_value): Redefine as aliases... (value_yes, value_no): ...for these new global strings; declare them. (value_none, value_virtual): New global strings; declare them. * src/pkgkeys.c (yes_value, no_value): Rename... (value_yes, value_no): ...to implement these, respectively. (value_none, value_virtual): Implement them. * src/pkgname.cpp (pkgXmlNode::ArchiveName): Check containing package node for `class' attribute set to `value_virtual'; if present, always return the effective `tarname' property as `value_none'. * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles): For packages with an effective `tarname' of `value_none', do not download anything. * src/pkgexec.cpp (pkgActionItem::Execute): For packages with an effective `tarname' of `value_none', do not invoke any tar archive processing function. 2010-03-02 Keith Marshall Don't write installation records for unavailable packages. * src/tarproc.cpp (pkgTarArchiveInstaller): In constructor, ensure archive is ready for processing, before initialising an installation manifest record. 2010-03-02 Keith Marshall Rationalise path identification for XML file locations. * src/sysroot.cpp (pkgXmlDocument::LoadSystemMap): Use `xmlfile()' function to locate `sysroot' map file; free memory when done. (pkgXmlDocument::UpdateSystemMap): Likewise. (sigpath): Static global variable disused; delete it. 2010-03-01 Keith Marshall Extend package name search to include component packages. * src/pkgfind.cpp (pkgHasMatchingName): Remove; fold it into... (pkgXmlNode::FindPackageByName): ...this; augment to extend search within package definition elements, seeking a potential match on an included component package name or component class-implied name. * src/pkgkeys.h (class_key): New global string constant; declare it. * src/pkgkeys.c (class_key): Implement it. 2010-02-16 Keith Marshall Bump version for next release cycle. * configure.ac (AC_INIT): Bump version suffix to alpha-2. 2010-02-16 Keith Marshall mingw-get-0.1-mingw32-alpha-1 released. 2010-02-16 Keith Marshall Prepare initial package release. * README: New file; use it to source release notes. * Makefile.in (SRCDIST_FILES): Use ... (LICENCE_FILES): ...this new macro; define it. (licdist): New build goal; implement it. (bindist): Require it; add alternative `zip' format package. * xml/profile.xml (repository): Set default `package-index' name. (system-map): Normalise spelling for default `sysroot' path names. 2010-02-10 Keith Marshall Add directory/file records in installation manifests. * src/pkgkeys.h (dirname_key, filename_key): New strings; declare... * src/pkgkeys.c (dirname_key, filename_key): ...and implement them. * src/pkgproc.h (pkgArchiveProcessor::installed): New class member variable; declare it. (pkgTarArchiveInstaller::UpdateInstallationManifest): New method; declare it. * src/tarproc.cpp: Miscellaneous comment updates. (pkgTarArchiveInstaller): In constructor... (pkgTarArchiveInstaller::installed): ...use new member variable... (pkgArchiveProcessor::installed): ...inherited from this. (pkgTarArchiveInstaller::UpdateInstallationManifest): Implement and... (pkgTarArchiveInstaller::ProcessDataStream): ...use it. (pkgTarArchiveInstaller::ProcessDirectory): Likewise. 2010-02-06 Keith Marshall Work around a deficiency in Microsoft's stat() implementation. * src/tarproc.cpp (pkgTarArchiveProcessor::ProcessDirectory): Don't pass a `pathname' argument with trailing slashes; strip them off. 2010-02-06 Keith Marshall Add machinery for installation and packaging for distribution. * install-sh: New file; source it from autoconf distribution. * configure.ac (AC_PREFIX_DEFAULT): Assign it as `C:/MinGW'. (AC_PROG_MKDIR_P, AC_PROG_INSTALL, AC_PROG_LN_S): Invoke these. (STRIP): New output variable; use AC_CHECK_TOOL to define it. * Makefile.in (abs_top_srcdir): Define to AC_SUBST value. (PACKAGE_TARNAME, PACKAGE_VERSION): Define to AC_SUBST values. (prefix, exec_prefix, bindir, libexecdir, localstatedir): Likewise. (INSTALL, INSTALL_PROGRAM, INSTALL_SCRIPT, INSTALL_DATA): Likewise. (STRIP): New macro; define it using AC_CHECK_TOOL substitution. (mkinstalldirs): New macro; define it as AC_PROG_MKDIR_P result. (LN_S): New macro; define it as AC_PROG_LN_S result. (dist, srcdist, bindist): New build objectives; implement them. (install, installdirs, install-strip, maintainer-clean): Likewise. (SRCDIST_FILES, SRCDIST_SUBDIRS): New macros; define them. (PACKAGE_DISTNAME, PACKAGE_DISTVERSION): Likewise. (PACKAGE_DISTROOT, PACKAGE_ROOTVERSION): Likewise. (PACKAGE_CONFIG_DIR): Likewise. 2010-02-02 Keith Marshall Implement package installer for tar archives. * src/pkgexec.cpp (pkgXmlDocument::Execute): Replace existing stub implementation of installer, using methods provided by... * src/pkgproc.h, src/tarproc.cpp: ...these new files, with trap... * src/pkgdeps.cpp (pkgXmlDocument::Schedule) [installed]: Add entry... (pkgActionItem::Selection) [to_remove]: ...for this; use it to detect `install' requests for packages which are aleady installed. * Makefile.in (CORE_DLL_OBJECTS): Add tarproc.$(OBJEXT); specify dependencies as appropriate. * src/sysroot.cpp (pkgXmlDocument::LoadSystemMap): Don't commit newly created `sysroot' mapping records to disk; defer to... (pkgXmlDocument::UpdateSystemMap): ...this new method. (sigpath): Make it a global variable, with file (static) scope. * src/climain.cpp (pkgXmlDocument::UpdateSystemMap): Invoke it. * src/pkgkeys.h (download_key, modified_key, source_key): New global string variables; declare them, providing their implementations... * src/pkgkeys.c (download_key, modified_key, source_key): ...here. * src/pkgname.cpp (download_key, source_key): Use them. * src/pkginet.cpp (pkgActionItem::ArchivePath): Delete; replace... * src/mkpath.c (pkgArchivePath): ...with this free standing function. * src/mkpath.h (pkgArchivePath): Declare its prototype. * src/pkgbase.h (pkgActionItem::ArchivePath): Delete declaration. (pkgXmlDocument): Add a default constructor; implement as `inline'. (pkgXmlDocument::AddDeclaration): Use heap memory to allocate the new declaration object, instead of `auto' variable, to avoid scope error. (pkgXmlDocument::UpdateSystemMap): Declare it. 2010-01-26 Keith Marshall Implement rudimentary dependency resolver. * src/pkgdeps.cpp: New file. * Makefile.in (CORE_DLL_OBJECTS): Add pkgdeps.$(OBJEXT) reference; establish header file dependencies. * src/pkgbase.h (to_remove, to_install, selection_types): New enum. (pkgActionItem::selection): Extend it to store as enumerated pair... (pkgActionItem::SelectPackage): New inline method; assign them. (pkgActionItem::Selection): New inline method; retrieve them. (pkgXmlNode::GetInstallationRecord): New method; declare it. * src/pkgexec.cpp (pkgActionItem): In constructor... (selection): ...initialise both references in enumerated pair. (pkgActionItem::GetReference): Use `Selection()' method. (pkgActionItem::SelectIfMostRecent): Ditto; also correct logic for making selection, and assign to `to_install' element. (pkgXmlDocument::Schedule): Don't update `request'. (pkgActionItem::Execute): Implement as stub. * src/pkginet.cpp (pkgActionItem::DownloadArchiveFiles): Use new `Selection()' method. * src/pkgkeys.h (yes_value, no_value): Declare new string constants. * src/pkgkeys.c (yes_value, no_value): Implement them. * src/vercmp.cpp: Update copyright notice. (pkgVersionInfo::operator<=): Bug fix; must test for `<', but had `>'. 2010-01-23 Keith Marshall Avoid segmentation faults when processing invalid data streams. * src/pkgstrm.h: Update copyright notice. (pkgArchiveStream::IsReady): New pure virtual method. (pkgRawArchiveStream::IsReady): Provide inline implementation. (pkgGzipArchiveStream::IsReady): Likewise. (pkgBzipArchiveStream::IsReady): Likewise. (pkgLzmaArchiveStream::IsReady): Likewise. (pkgXzArchiveStream::IsReady): Likewise. * src/pkgstrm.cpp: Update copyright notice. (pkgLzmaArchiveStream, pkgXzArchiveStream) [fd == -1]: Decline to perform any form of read or decode processing. * src/pkginet.cpp (pkgInternetLzmaStreamingAgent): Use `fd = -2' as pseudo-descriptor for the pkgLzmaArchiveStream derived component of this internet data streaming class. 2010-01-23 Keith Marshall Require liblzma >= liblzma-4.999.9beta_20091209-3-mingw32-dev * src/pkgstrm.h (LZMA_API_STATIC): Remove definition and associated comment; it was required to permit, (but not to enforce), linking to the static liblzma.a library, with earlier beta releases, but this anomaly has now been corrected. 2010-01-22 Keith Marshall Remove zlib sources from trunk. (Application builders should use free standing implementation of zlib, from MinGW's package distribution page on SourceForge). 2010-01-22 Keith Marshall Remove bzip2 sources from trunk. (Application builders should use free standing implementation of bzip2, from MinGW's package distribution page on SourceForge). 2010-01-22 Keith Marshall Add subsystem specific sysroot mapping facility. * src/pkghash.c: New file; required by... * src/sysroot.cpp: New file; it implements... (pkgXmlDocument::LoadSystemMap, pkgXmlNode::GetSysRoot): New methods. * src/pkgbase.h: Update copyright notice. (pkgXmlDocument::LoadSystemMap): Declare it. (pkgXmlDocument::AddDeclaration): New inline method. (pkgXmlDocument::SetRoot, pkgXmlDocument::Save): Likewise. (pkgXmlNode::GetSysRoot): Declare it. (pkgXmlNode::GetDocumentRoot): New inline method. (pkgXmlNode::AddChild, pkgXmlNode::DeleteChild): Likewise. * src/climain.cpp: Update copyright notice. (climain): Invoke pkgXmlDocument::LoadSystemMap() as required. * Makefile.in (CORE_DLL_OBJECTS): Add ... (pkghash.$(OBJEXT), sysroot.$(OBJEXT)): ...these; upate dependencies. (DEBUGLEVEL): New macro; define it. (CPPFLAGS): Use it. 2010-01-16 Keith Marshall Assign standardised keys for XML database lookup. * src/pkgkeys.h: New file; provide public key declarations. * src/pkgkeys.c: New file; implement them. * src/pkgbind.cpp: Use them; update copyright notice. * src/pkgexec.cpp, src/pkgfind.cpp, src/pkginet.cpp: Likewise. * src/pkgname.cpp, src/pkgspec.cpp: Likewise. * Makfile.in (CORE_DLL_OBJECTS): Add pkgkeys.$(OBJEXT); update all dependencies accordingly. 2010-01-08 Keith Marshall Add CLI version reporting option. * configure.ac: Update copyright notice for new year. (COPYRIGHT_HOLDER): New AC_SUBST variable; define it. (YEARS_OF_ISSUE): New AC_SUBST variable; define it. (AC_CONFIG_FILES): Add `version.c'; source it from... * version.c.in: ...this new file. * Makefile.in: Update copyright notice for new year. (mingw-get$(EXEEXT)): Add dependency on `version.$(OBJEXT)'. (distclean): Add `version.c'. * configure: Regenerated. * src/clistub.c: Update copyright notice for new year. (options): New array of `struct option'; define and use it as the reference for `argv' parsing with `getopt_long_only()'. 2009-12-17 Keith Marshall Add CLI support for "update" action. * src/pkgtask.h (ACTION_UPDATE): Define it, derived from... (action_update): ...this new entry in anonymous enumeration. * src/pkgexec.cpp (action_name): Add "update" keyword identification. * src/pkgbase.h: Typo in comment; s/xwXmlDocument/wxXmlDocument/. (pkgXmlDocument::BindRepositories): Add `force_update' parameter... * src/pkgbind.cpp (pkgXmlDocument::BindRepositories): Use it to... (pkgXmlDocument::SyncRepository): ...invoke this method when passed as a `true' flag, in addition to (as previously) first time reference. * src/climain.cpp (climain): Interpret "update" keyword for... [ACTION_UPDATE]: ...passing state as `force_update' parameter to... (pkgXmlDocument::BindRepositories): ...this method, then... [!ACTION_UPDATE]: Follow with normal action processing. 2009-12-16 Keith Marshall Add status checking for Internet URL connections. * src/pkginet.cpp (pkgInternetAgent::QueryStatus): New method. (pkgInternetStreamingAgent::Get): Use it; set `dl_status' as return value, deferring failure diagnostics to callers, i.e. to... (pkgXmlDocument::SyncRepositories): ...this, and to... (pkgActionItem::DownloadArchiveFiles): ...this. 2009-11-23 Keith Marshall Add package download and repository synchronisation machinery. * src/pkgstrm.h: New header file. * src/pkgbind.cpp, src/pkginet.cpp, src/pkgstrm.cpp, src/pkgfind.cpp, src/pkgname.cpp, src/keyword.c: New files. * Makefile.in (CORE_DLL_OBJECTS): Add build goals for them. * xml: New directory. * src/climain.cpp (climain): Establish repository bindings from... * xml/profile.xml: ...this new configuration file. 2009-11-16 Keith Marshall Add XML database bindings and preliminary action executive for CLI. * src/pkgbase.h, src/pkgtask.h, src/mkpath.h, src/vercmp.h: New header files. * src/climain.cpp, src/pkgexec.cpp, src/pkgspec.cpp, src/mkpath.c, src/vercmp.cpp, src/xmlfile.c: New files. * Makefile.in (CORE_DLL_OBJECTS): Define initial set of files... (mingw-get-0.dll): ...build them into this new DLL target; add it... (all): ...as prerequisite for this primary build goal. 2009-11-12 Keith Marshall Avoid some potential GCC warnings. * src/clistub.c: Include process.h for `execv' prototype... (main): Cast `argv' to appropriately matched type when calling it. * src/pkginfo/driver.c: Include stdlib.h for `free' prototype. 2009-11-11 Keith Marshall Create diagnostic message handler for CLI usage. * src/dmh.h: New header file; it defines the public interface. * src/dmh.cpp: New file; it implements the message handler. 2009-11-05 Keith Marshall Correct some identified TinyXML issues. * tinyxml/tinyxml.h (IsWhiteSpace): Add FIXME annotation to flag probable redundancy of checks for '\n' and '\r'. * tinyxml/tinyxmlparser.cpp: Revert John E's 2008-08-09 change; remove all such redundancies in IsWhiteSpace() calls throughout. * tinyxml/tinyxml.cpp (TiXmlAttribute::SetDoubleValue): Correct format specification in sprintf()/snprintf() calls; "%lf" is invalid; replace with "%f". 2009-10-31 Keith Marshall Add CLI loader stub. * src/clistub.c: New file. * Makefile.in: Add build rule for it; build as... (mingw-get.exe): ...this; also add to... (clean): ...this goal. 2009-10-31 Keith Marshall Set up build mechanism. * configure.ac, Makefile.in: New files. * .cvsignore (configure, autom4te.cache): Add to ignored files. 2009-10-30 Keith Marshall Add GPL-v3 licensing terms. * COPYING: New file, sourced from gnu.org. 2009-10-12 Keith Marshall Add pkginfo implementation. * src, src/pkginfo: New directories. * src/pkginfo/pkginfo.h, src/pkginfo/pkginfo.l: New files. * src/pkginfo/driver.c: New file. 2009-10-12 Keith Marshall Create tdm-branch. * All files (tdm-branch): Assign new branch tag. * All top-level files: Remove from trunk. * ChangeLog: New file.