mirror of
https://github.com/chocolate-doom/chocpkg.git
synced 2025-02-23 12:11:41 +00:00
Add initial chocpkg scripts.
This commit is contained in:
commit
367c247f30
15 changed files with 355 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
build
|
||||||
|
install
|
||||||
|
packages
|
187
chocpkg/chocpkg
Executable file
187
chocpkg/chocpkg
Executable file
|
@ -0,0 +1,187 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
basic_setup() {
|
||||||
|
if [ "${CHOCPKG_ROOT:-}" = "" ]; then
|
||||||
|
echo "CHOCPKG_ROOT not configured - please source setup.sh." \
|
||||||
|
>> /dev/stderr
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
INSTALL_DIR="$CHOCPKG_ROOT/install"
|
||||||
|
PACKAGES_DIR="$CHOCPKG_ROOT/packages"
|
||||||
|
BUILD_DIR="$CHOCPKG_ROOT/build"
|
||||||
|
mkdir -p "$INSTALL_DIR" "$PACKAGES_DIR" "$BUILD_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
basic_setup
|
||||||
|
|
||||||
|
. chocpkg_functions.sh
|
||||||
|
|
||||||
|
# Function that returns true if the package is installed.
|
||||||
|
check_installed() {
|
||||||
|
if [ "${PACKAGE_INSTALLED_TOOL:-}" != "" ]; then
|
||||||
|
have_tool "$PACKAGE_INSTALLED_TOOL"
|
||||||
|
elif [ "${PKGCONFIG_NAME:-}" != "" ]; then
|
||||||
|
if ! have_tool pkg-config; then
|
||||||
|
error_exit "pkg-config not installed; please run:" \
|
||||||
|
" chocpkg install pkg-config"
|
||||||
|
fi
|
||||||
|
pkg-config --exists "$PKGCONFIG_NAME"
|
||||||
|
else
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function invoked before a package is built to set up the build environment,
|
||||||
|
# if necessary. Can be overridden by pkgdef files.
|
||||||
|
prebuild_setup() {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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
|
||||||
|
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_TYPE=fetch
|
||||||
|
PACKAGE_CONFIGURE_OPTS=""
|
||||||
|
DEPENDENCIES=""
|
||||||
|
GIT_BRANCH=master
|
||||||
|
. "$pkg_file"
|
||||||
|
|
||||||
|
# After reading the package file, configure a few more variables:
|
||||||
|
case "$PACKAGE_TYPE" in
|
||||||
|
fetch)
|
||||||
|
PACKAGE_FILENAME="$PACKAGE_NAME-$PACKAGE_VERSION.tar.gz"
|
||||||
|
PACKAGE_BUILD_DIR="$BUILD_DIR/$PACKAGE_NAME-$PACKAGE_VERSION"
|
||||||
|
;;
|
||||||
|
git)
|
||||||
|
PACKAGE_BUILD_DIR="$BUILD_DIR/$PACKAGE_NAME"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error_exit "Unknown package type $PACKAGE_TYPE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
download_package_file() {
|
||||||
|
local dlfile="$PACKAGES_DIR/$PACKAGE_FILENAME"
|
||||||
|
if [ ! -e "$dlfile" ]; then
|
||||||
|
local tmpfile="$dlfile.part"
|
||||||
|
if ! chocurl "$PACKAGE_URL" > $tmpfile; then
|
||||||
|
error_exit "Failed to download $PACKAGE_URL"
|
||||||
|
fi
|
||||||
|
mv "$tmpfile" "$dlfile"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_package_file() {
|
||||||
|
local dlfile="$PACKAGES_DIR/$PACKAGE_FILENAME"
|
||||||
|
(cd "$BUILD_DIR"; gunzip < "$dlfile" | tar -x) || (
|
||||||
|
mv "$dlfile" "$dlfile.bad"
|
||||||
|
error_exit "Failed to extract $PACKAGE_FILENAME: bad download?"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_package() {
|
||||||
|
case "$PACKAGE_TYPE" in
|
||||||
|
fetch)
|
||||||
|
download_package_file
|
||||||
|
extract_package_file
|
||||||
|
;;
|
||||||
|
git)
|
||||||
|
if [ ! -e "$PACKAGE_BUILD_DIR" ]; then
|
||||||
|
git clone -b "$GIT_BRANCH" "$GIT_URL" "$PACKAGE_BUILD_DIR"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_build_environment() {
|
||||||
|
CPPFLAGS="-I$INSTALL_DIR/include -I$INSTALL_DIR/include/SDL"
|
||||||
|
LDFLAGS="-L$INSTALL_DIR/lib $LDFLAGS"
|
||||||
|
ACLOCAL_PATH="$INSTALL_DIR/share/aclocal:$ACLOCAL_PATH"
|
||||||
|
export CPPFLAGS LDFLAGS ACLOCAL_PATH
|
||||||
|
|
||||||
|
if [ $(uname) = "Darwin" ]; then
|
||||||
|
CC="gcc -m32"
|
||||||
|
CXX="g++ -m32"
|
||||||
|
LDFLAGS="-lobjc $LDFLAGS"
|
||||||
|
MACOSX_DEPLOYMENT_TARGET=10.5
|
||||||
|
export CC CXX MACOSX_DEPLOYMENT_TARGET
|
||||||
|
else
|
||||||
|
LDFLAGS="-Wl,-rpath -Wl,$INSTALL_DIR/lib $LDFLAGS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
build_package() {
|
||||||
|
if [ "$PACKAGE_NAME" != "pkg-config" ]; then
|
||||||
|
chocpkg install pkg-config
|
||||||
|
fi
|
||||||
|
for dep in $DEPENDENCIES; do
|
||||||
|
chocpkg install "$dep"
|
||||||
|
done
|
||||||
|
fetch_package "$PACKAGE_NAME"
|
||||||
|
|
||||||
|
echo =======================================================
|
||||||
|
echo "Building $PACKAGE_NAME..."
|
||||||
|
echo =======================================================
|
||||||
|
echo
|
||||||
|
cd "$PACKAGE_BUILD_DIR"
|
||||||
|
|
||||||
|
if ! prebuild_setup; then
|
||||||
|
error_exit "Failed pre-build setup step for $PACKAGE_NAME."
|
||||||
|
fi
|
||||||
|
|
||||||
|
./configure --prefix="$INSTALL_DIR" $PACKAGE_CONFIGURE_OPTS || (
|
||||||
|
error_exit "Failed to configure package $PACKAGE_NAME for build."
|
||||||
|
)
|
||||||
|
|
||||||
|
make || (
|
||||||
|
error_exit "Failed to build package $PACKAGE_NAME."
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
install_package() {
|
||||||
|
# Already installed?
|
||||||
|
if check_installed; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
build_package "$PACKAGE_NAME"
|
||||||
|
|
||||||
|
cd "$PACKAGE_BUILD_DIR"
|
||||||
|
make install || (
|
||||||
|
error_exit "Failed to install package $PACKAGE_NAME."
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
echo "Usage: $0 [fetch|build|install|installed] <package name>"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd=$1; package=$2
|
||||||
|
configure_for_package "$package"
|
||||||
|
|
||||||
|
case "$cmd" in
|
||||||
|
fetch)
|
||||||
|
fetch_package
|
||||||
|
;;
|
||||||
|
build)
|
||||||
|
build_package
|
||||||
|
;;
|
||||||
|
install)
|
||||||
|
install_package
|
||||||
|
;;
|
||||||
|
installed)
|
||||||
|
check_installed
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
44
chocpkg/chocpkg_functions.sh
Normal file
44
chocpkg/chocpkg_functions.sh
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
# Check if the specified string matches the glob pattern.
|
||||||
|
pattern_match() {
|
||||||
|
pattern="$1"
|
||||||
|
|
||||||
|
case "$2" in
|
||||||
|
$pattern)
|
||||||
|
true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
false
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine if a given program is in the PATH.
|
||||||
|
have_tool() {
|
||||||
|
tool=$1
|
||||||
|
|
||||||
|
result=1
|
||||||
|
SAVE_IFS=$IFS
|
||||||
|
IFS=:
|
||||||
|
|
||||||
|
for dir in $PATH; do
|
||||||
|
if [ -e $dir/$tool ]; then
|
||||||
|
#echo $dir/$tool
|
||||||
|
result=0
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
IFS=$SAVE_IFS
|
||||||
|
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
error_exit() {
|
||||||
|
(echo
|
||||||
|
for line in "$@"; do
|
||||||
|
echo "$line"
|
||||||
|
done) >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
25
chocpkg/chocurl
Executable file
25
chocpkg/chocurl
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
. chocpkg_functions.sh
|
||||||
|
|
||||||
|
url=$1
|
||||||
|
|
||||||
|
if have_tool curl; then
|
||||||
|
exec curl $url
|
||||||
|
fi
|
||||||
|
|
||||||
|
if have_tool wget; then
|
||||||
|
exec wget $url -O -
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Desperate?
|
||||||
|
|
||||||
|
for l in lynx links elinks; do
|
||||||
|
if have_tool $l; then
|
||||||
|
echo "Using $l to download $url..." >&2
|
||||||
|
exec $l -source $url
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
error_exit "No tool available to retrieve URLs. Please install curl or wget."
|
||||||
|
|
10
pkgdef/SDL2.sh
Normal file
10
pkgdef/SDL2.sh
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
PACKAGE_VERSION=2.0.3
|
||||||
|
PACKAGE_URL=http://www.libsdl.org/release/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=sdl2
|
||||||
|
|
||||||
|
# Many OS X systems have the Quartz X11 server installed, but
|
||||||
|
# we probably don't want to use it.
|
||||||
|
if [ $(uname) = "Darwin" ]; then
|
||||||
|
PACKAGE_CONFIGURE_OPTS=--disable-video-x11
|
||||||
|
fi
|
||||||
|
|
18
pkgdef/SDL2_mixer.sh
Normal file
18
pkgdef/SDL2_mixer.sh
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
PACKAGE_VERSION=2.0.1
|
||||||
|
PACKAGE_URL=http://www.libsdl.org/projects/SDL_mixer/release/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=SDL2_mixer
|
||||||
|
|
||||||
|
# Disable dependencies on external libraries for sound file formats:
|
||||||
|
PACKAGE_CONFIGURE_OPTS="
|
||||||
|
--disable-music-mod --disable-music-mp3
|
||||||
|
--disable-music-flac-shared --disable-music-ogg-shared
|
||||||
|
"
|
||||||
|
|
||||||
|
# ...except ones we have installed:
|
||||||
|
if ! chocpkg installed flac; then
|
||||||
|
PACKAGE_CONFIGURE_OPTS="$PACKAGE_CONFIGURE_OPTS --disable-music-flac"
|
||||||
|
fi
|
||||||
|
if ! chocpkg installed libogg; then
|
||||||
|
PACKAGE_CONFIGURE_OPTS="$PACKAGE_CONFIGURE_OPTS --disable-music-ogg"
|
||||||
|
fi
|
||||||
|
|
4
pkgdef/SDL2_net.sh
Normal file
4
pkgdef/SDL2_net.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
PACKAGE_VERSION=2.0.1
|
||||||
|
PACKAGE_URL=http://www.libsdl.org/projects/SDL_net/release/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=SDL2_net
|
||||||
|
|
14
pkgdef/chocolate-doom-git.sh
Normal file
14
pkgdef/chocolate-doom-git.sh
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
PACKAGE_TYPE=git
|
||||||
|
GIT_URL=https://github.com/fragglet/chocolate-doom.git
|
||||||
|
GIT_BRANCH=sdl2-branch
|
||||||
|
DEPENDENCIES="SDL2 SDL2_mixer SDL2_net"
|
||||||
|
|
||||||
|
prebuild_setup() {
|
||||||
|
mkdir -p autotools
|
||||||
|
aclocal -I "$INSTALL_DIR/share/aclocal"
|
||||||
|
autoheader
|
||||||
|
automake -a -c
|
||||||
|
autoconf
|
||||||
|
automake
|
||||||
|
}
|
||||||
|
|
4
pkgdef/flac.sh
Normal file
4
pkgdef/flac.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
PACKAGE_VERSION=1.2.1
|
||||||
|
PACKAGE_URL=http://www.chocolate-doom.org/depends/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=flac
|
||||||
|
|
4
pkgdef/libogg.sh
Normal file
4
pkgdef/libogg.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
PACKAGE_VERSION=1.3.1
|
||||||
|
PACKAGE_URL=http://www.chocolate-doom.org/depends/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=ogg
|
||||||
|
|
4
pkgdef/libpng.sh
Normal file
4
pkgdef/libpng.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
PACKAGE_VERSION=1.6.10
|
||||||
|
PACKAGE_URL=http://www.chocolate-doom.org/depends/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=libpng
|
||||||
|
|
4
pkgdef/libsamplerate.sh
Normal file
4
pkgdef/libsamplerate.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
PACKAGE_VERSION=0.1.8
|
||||||
|
PACKAGE_URL=http://www.chocolate-doom.org/depends/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=samplerate
|
||||||
|
|
5
pkgdef/libvorbis.sh
Normal file
5
pkgdef/libvorbis.sh
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
PACKAGE_VERSION=1.3.4
|
||||||
|
PACKAGE_URL=http://www.chocolate-doom.org/depends/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PKGCONFIG_NAME=vorbis
|
||||||
|
DEPENDENCIES="libogg"
|
||||||
|
|
5
pkgdef/pkg-config.sh
Normal file
5
pkgdef/pkg-config.sh
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
PACKAGE_VERSION=0.28
|
||||||
|
PACKAGE_URL=https://pkgconfig.freedesktop.org/releases/pkg-config-${PACKAGE_VERSION}.tar.gz
|
||||||
|
PACKAGE_INSTALLED_TOOL=pkg-config
|
||||||
|
PACKAGE_CONFIGURE_OPTS="--with-internal-glib"
|
||||||
|
|
24
setup.sh
Normal file
24
setup.sh
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
CHOCPKG_ROOT=$HOME/chocolate-doom-build
|
||||||
|
export CHOCPKG_ROOT
|
||||||
|
|
||||||
|
# Build directory must not contain a space, or bad things happen:
|
||||||
|
case "$CHOCPKG_ROOT" in
|
||||||
|
*\ *)
|
||||||
|
cat <<END
|
||||||
|
The path to your home directory contains a space:
|
||||||
|
|
||||||
|
HOME=$HOME
|
||||||
|
|
||||||
|
This script will probably fail to build - reset HOME to point
|
||||||
|
somewhere else. For example, type:
|
||||||
|
|
||||||
|
mkdir /home/user
|
||||||
|
HOME=/home/user
|
||||||
|
END
|
||||||
|
exit -1
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Set up various environment variables:
|
||||||
|
PATH="$CHOCPKG_ROOT/chocpkg:$CHOCPKG_ROOT/install/bin:$PATH"
|
||||||
|
|
Loading…
Reference in a new issue