Remove pinning of a package to a PACKAGE_TYPE.

Previously a particular package could only ever be installed to target
or native. Instead, allow any package to be installed to either, with
target being the default. Native packages can only ever have native
dependencies, but target packages can depend on native ones in order to
install tools which they need for their build process.
This commit is contained in:
Simon Howard 2016-03-05 15:15:50 -05:00
parent e6a0dfda11
commit 14bef92feb
7 changed files with 45 additions and 28 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
build
build.native
install
install.native
packages

View File

@ -36,12 +36,15 @@ basic_setup() {
PATH="$CHOCPKG_ROOT/chocpkg:$PATH"
fi
PACKAGES_DIR="$CHOCPKG_ROOT/packages"
INSTALL_DIR="$CHOCPKG_ROOT/install"
NATIVE_INSTALL_DIR="$CHOCPKG_ROOT/install.native"
PACKAGES_DIR="$CHOCPKG_ROOT/packages"
BUILD_DIR="$CHOCPKG_ROOT/build"
NATIVE_BUILD_DIR="$CHOCPKG_ROOT/build.native"
mkdir -p "$INSTALL_DIR" "$NATIVE_INSTALL_DIR" "$PACKAGES_DIR" "$BUILD_DIR"
mkdir -p "$PACKAGES_DIR" \
"$INSTALL_DIR" "$NATIVE_INSTALL_DIR" \
"$BUILD_DIR" "$NATIVE_BUILD_DIR"
}
basic_setup
@ -58,33 +61,55 @@ dependencies() {
DEPENDENCIES+=" $*"
}
dependencies_for_native() {
for dep in $DEPENDENCIES; do
if [[ "$PACKAGE_TYPE" = native ]] && ! [[ "$dep" =~ native: ]]; then
echo "native:$dep"
else
echo "$dep"
fi
done
}
# Given a package name, find the pkgdef file associated with it, source
# the contents of the file and set various variables.
configure_for_package() {
local package=$1
PACKAGE_NAME=$package
# Detect native: prefix and set package type.
if [[ "$package" =~ ^native: ]]; then
PACKAGE_TYPE=native
package=${package/#native:/}
else
PACKAGE_TYPE=target
fi
# Defaults before loading package file.
PACKAGE_DESCRIPTION="Package $package"
DEPENDENCIES=""
PACKAGE_DIR_NAME=$package
local pkg_file="$CHOCPKG_ROOT/pkgdef/$package.sh"
if [ ! -e "$pkg_file" ]; then
error_exit "Package file $package.sh not found."
fi
# Defaults for package unless overridden:
PACKAGE_NAME=$package
PACKAGE_DIR_NAME=$package
PACKAGE_TYPE=target
PACKAGE_DESCRIPTION="Package $PACKAGE_NAME"
DEPENDENCIES=""
. "$pkg_file"
PACKAGE_BUILD_DIR="$BUILD_DIR/$PACKAGE_DIR_NAME"
# We set up build differently depending on the package type: some packages
# are for the target we're building for; others are native tools to run on
# the build machine as part of the build process.
case "$PACKAGE_TYPE" in
target)
PACKAGE_INSTALL_DIR="$INSTALL_DIR"
PACKAGE_BUILD_DIR="$BUILD_DIR/$PACKAGE_DIR_NAME"
;;
native)
PACKAGE_INSTALL_DIR="$NATIVE_INSTALL_DIR"
PACKAGE_BUILD_DIR="$NATIVE_BUILD_DIR/$PACKAGE_DIR_NAME"
# When installing a native package, all its dependencies are
# necessarily native as well.
DEPENDENCIES=$(dependencies_for_native)
;;
package-group)
;;
@ -197,7 +222,6 @@ cmd_packages() {
package_info() {
printf "package: %s\n" "$PACKAGE_NAME"
printf "description: %s\n" "$PACKAGE_DESCRIPTION"
printf "type: %s\n" "$PACKAGE_TYPE"
printf "installed: "
if chocpkg installed "$PACKAGE_NAME"; then

View File

@ -4,7 +4,7 @@ check_pkgconfig::init() {
# If we're using pkg-config to check, we need to install pkg-config
# first.
dependencies pkg-config
dependencies native:pkg-config
}
# Function that returns true if the package is installed.

View File

@ -26,7 +26,9 @@ extract_package_file() {
mkdir -p "$PACKAGE_BUILD_DIR"
cd "$PACKAGE_BUILD_DIR"
else
cd "$BUILD_DIR"
local parent_dir=$(dirname "$PACKAGE_BUILD_DIR")
echo "cd to $parent_dir">/dev/stderr
cd "$parent_dir"
fi
(gunzip < "$dlfile" | tar -x) || (
mv "$dlfile" "$dlfile.bad"

View File

@ -1,7 +1,7 @@
package_group::init() {
PACKAGE_TYPE=package-group
PKGGRP_PACKAGES="$*"
dependencies "$@"
}
do_fetch() {
@ -18,20 +18,20 @@ do_build() {
# Installing a package group means installing all its packages; we don't
# trigger the build step like 'install' usually does (we don't have one).
cmd_install() {
for package in $PKGGRP_PACKAGES; do
for package in $DEPENDENCIES; do
chocpkg install "$package"
done
}
# Reinstalling a package group means reinstalling *all* its packages.
cmd_reinstall() {
for package in $PKGGRP_PACKAGES; do
for package in $DEPENDENCIES; do
chocpkg reinstall "$package"
done
}
cmd_dependencies() {
for package in $PKGGRP_PACKAGES; do
for package in $DEPENDENCIES; do
echo "$package"
chocpkg dependencies "$package"
done | sort | uniq
@ -39,7 +39,7 @@ cmd_dependencies() {
# Package group is installed if all its packages are installed.
cmd_installed() {
for package in $PKGGRP_PACKAGES; do
for package in $DEPENDENCIES; do
chocpkg installed "$package"
done
}

View File

@ -95,15 +95,6 @@ dependencies other-package neato-lib
package_group neato-lib dumbo-lib
```
## Variables
* `PACKAGE_TYPE`: has a value of either `native` or `target`. The
default is `target`. The variable controls whether the package is
built for the target system when doing cross-compiles, or whether it
is part of the build (native) system and just used to build tools as
part of the build process. The package type determines whether the
result is installed into `install` or `install.native`.
## Advanced builds
Complicated packages can require custom build steps. The following functions

View File

@ -1,4 +1,3 @@
PACKAGE_TYPE=native
description "Development tool for locating installed packages and libraries"
check_tool pkg-config
fetch_download https://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz