ocaml-core / bin / make-dist

#!/usr/bin/env bash
set -e -u -o pipefail

source $(dirname -- "$0")/../build-common.sh
root=$(cd "$HERE"; hg root)

function usage {
    echo "usage: ${BASH_SOURCE[0]} <dest-dir> [packages...]"
}

if [[ $# -lt 1 ]]; then usage; exit 1; fi

destdir="$1"
shift
if [[ $# -gt 0 ]]; then
    dirs="$@"
else
    dirs="${build_order[@]}"
fi

function file_included {
    case "$1" in
        oasis.sh)             false;;
        _build)               false;;
        setup.log|setup.data) false;;
        *) [[ ! -e "$1"/oasis.sh ]];;
    esac
}
excluded=(
    oasis.sh
    _build
    setup.log
    setup.data
)

cp "$root/build-and-install" "$destdir/"

packages=( )
for dir in $dirs; do
    pushd "$root/$dir"

    ./oasis.sh
    name=$(oasis query name)
    version=$(oasis query version)

    packages+=( "${name}-${version}" )
    echo "    $name-$version" >>"$destdir/build-common.sh"

    dest="$destdir/${name}-${version}"
    mkdir "$dest"

    for f in *; do
        if file_included "$f"; then
            cp -rp "$f" "$dest/$f"
        fi
    done
    cp -p "$root"/licensing/* "$dest/"

    popd
done

cat >"$destdir/build-common.sh" <<EOF
#!/bin/bash

core_version=$core_version

# in dependency-topological order
build_order=(
$(for pkg in "${packages[@]}"; do
    echo "    $pkg"
  done)
)

HERE=\$(cd "$(dirname -- "\$0")"; pwd);
EOF

cp $(hg root)/README "$destdir/"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.