external.txt 1.0.0                    UTF-8                       2015-01-08

              CORINTHIA EXTERNAL DOWNLOADS FOR WINDOWS x86 BUILDS
              ===================================================

    The external\ folder holds scripts and the download\ sub-folder for
    external software that Corinthia Windows Win32 x86 builds depend on.

    Note: This repository folder is intended to be usable when cloned to a
    Microsoft platform.  The notation for file paths reflects that, even
    though POSIX path notation is used in the git and when viewed on GitHub.


MANIFEST

    external.txt
        This summary, manifest and work-item file for activity in this
        external folder

    .gitignore
        Rule for excluding the download\ subfolder from the repository

    extract_downloads.bat
        Windows console session batch file for fetching and extracting
        the external packages

    fetch_downloads.bat
        Windows console session batch file for fetching the external
        packages to download\ without extracting anything; used by
        extract_downloads to retrieve any packages not downloaded yet

    README.txt
        general description of the procedures and their usage

    customize.txt
        description of general procedure for customizing the procedures
        in creating downloads on Windows for other purposes

    maintenance.txt
        description of the basic maintenance and modification-testing when
        these procedures are updated and/or customized

    unzip-win.js
        helper JScript file used by extract_downloads to extract all
        of the files in a Zip into a specified desktop folder

    wget-win.js
        helper JScript file used by fetch_downloads to make web requests
        for downloading of specified URLs to specific download locations.


 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 TODO:
  * Make headway on issue COR-21 to either reconcile it or figure out what
    to do with "malformed" Zip files that create empty directories (a
    Unix-ism).

 1.0.1 2015-02-14-11:59 Add TODO
       Note that the *.sh files are not listed in this manifest.  They are
       now also removed, since they conflict with changes made to where
       the externals are unzipped.
 1.0.0 2015-01-08-21:14 Create initial version to account for the files in
       the external\ folder

                       *** end of external.txt ***