diff options
Diffstat (limited to 'stowpkg')
-rwxr-xr-x | stowpkg | 198 |
1 files changed, 198 insertions, 0 deletions
@@ -0,0 +1,198 @@ +#!/usr/bin/env sh +# +# stowpkg package manager +# +# Copyright (C) 2017 Silvio Rhatto - rhatto at riseup.net +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation, either version 3 of the License, +# or any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Parameters +VERSION="0.0.1" +DIRNAME="$(cd `dirname $0` && pwd)" +BASENAME="`basename $0`" +ACTION="$1" + +__stowpkg_initialize () { + # Check for stow + if ! which stow > /dev/null 2>&1; then + echo "$BASENAME: please install stow first" + exit 1 + fi + + # Sudo config + if [ "`whoami`" != 'root' ]; then + SUDO="sudo" + fi + + # Source config file + if [ -e "$HOME/.config/stowpkg" ]; then + . "$HOME/.config/stowpkg" + fi + + # Ports + if [ -z "$PORTS" ]; then + PORTS="$DIRNAME/ports" + fi + + # Set base + if [ -z "$BASE" ]; then + BASE="$DIRNAME/tree/`uname -m`" + fi + + # Sources + if [ -z "$SOURCES" ]; then + SOURCES="$BASE/src" + fi + + # Binaries + if [ -z "$BINARIES" ]; then + BINARIES="$BASE/stow" + fi + + # Ensure folders exists + mkdir -p $BASE $PORTS $SOURCES $BINARIES + + # Export + export BASE="$BASE" + export PORTS="$PORTS" + export SOURCES="$SOURCES" + export BASE="$BINARIES" +} + +stowpkg_usage () { + echo "$BASENAME $VERSION - a package manager" + echo "" + echo "usage: $BASENAME <action> [options]" + echo "" + echo "available actions:" + echo "" + grep "^stowpkg_" $0 | cut -d ' ' -f 1 | sed -e 's/stowpkg_//' | sort | xargs -L 6 | column -t -c 6 | sed -e 's/^/\t/' + echo "" + + exit 1 +} + +stowpkg_search () { + local package="$2" + + if [ ! -z "$package" ]; then + stowpkg_search | grep "$package$" + else + ( cd $PORTS && find -name 'desc' | sed -e 's|^\./||' -e 's|/desc||' ) + fi +} + +stowpkg_install () { + local package="$2" + + if [ -z "$package" ]; then + stowpkg_usage + fi + + # Find package on ports + local location="$PORTS/`$0 search $package`" + + if [ "$location" = "${PORTS}/" ]; then + echo "$BASENAME: package not found: $package" + exit 1 + fi + + if [ "`basename $location`" != "$package" ]; then + echo "$BASENAME: package not found: $package" + exit 1 + fi + + # Source environment + if [ -e "$location/env" ]; then + . $location/env + fi + + # Set default version + if [ -z "$version" ]; then + version="latest" + fi + + # Set PREFIX + if [ -z "$PREFIX" ]; then + PREFIX="$BINARIES/${package}-${version}" + fi + + # Resolve default dependencies + if [ ! -z "$dependencies_stowpkg" ]; then + for dependency in $dependencies_stowpkg; do + $0 install $dependency + done + fi + + # Resolve debian dependencies + if [ -e "/etc/debian_version" ]; then + if [ ! -z "$dependencies_debian" ]; then + $SUDO apt install $dependencies_debian + fi + fi + + # Go to sources folder + cd $SOURCES + + # Download sources if needed + if [ ! -d "${package}-${version}" ]; then + if [ "$source_format" = "git" ]; then + git clone $url ${package}-${version} + fi + fi + + # Go to source folder + if [ ! -d "${package}-${version}" ]; then + echo "$BASENAME: source not found for package $package" + exit 1 + fi + + cd ${package}-${version} + + # Build + if [ -e "$location/rules" ]; then + . $location/rules + else + # Run default rules + if [ -e "Makefile" ]; then + make clean + fi + + if [ -e "configure" ]; then + ./configure --prefix=$PREFIX + fi + + if [ -e "Makefile" ]; then + make PREFIX=$PREFIX + make PREFIX=$PREFIX install + fi + fi + + cd $BINARIES + + if [ -d "${package}-${version}" ]; then + stow ${package}-${version} || exit 1 + else + echo "$BASENAME: error building $package" + exit 1 + fi +} + +# Dispatch +if grep -q "^stowpkg_$ACTION () {$" $0; then + __stowpkg_initialize + stowpkg_$ACTION $* +else + stowpkg_usage +fi |