diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-07-17 15:16:47 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-07-17 15:16:47 -0400 |
commit | 4d96198479e427788656c2d4d6e586908f24d1c6 (patch) | |
tree | efe37c025160642e96c8e4946fb828aed2512d0f /bin | |
download | sfpm-4d96198479e427788656c2d4d6e586908f24d1c6.tar.gz |
Initial commit
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/sfpm | 62 | ||||
-rwxr-xr-x | bin/sfpm_makepkg | 78 |
2 files changed, 140 insertions, 0 deletions
diff --git a/bin/sfpm b/bin/sfpm new file mode 100755 index 0000000..36bebbf --- /dev/null +++ b/bin/sfpm @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +source "$(dirname ${BASH_SOURCE[0]})/../share/sfpm/common.sh" +sfpm_gen_sysroot + +# ---- +env_name= +mode_install=0 +mode_search=0 +mode_update=0 +mode_verify=0 +packages=() + +while (( "${#}" )); do + case "${1}" in + -e|--env) + env_name="${2}" + shift 2 + ;; + -i|--install) + mode_install=1 + shift + ;; + -s|--search) + mode_search=1 + shift + ;; + -u|--update|--upgrade) + mode_update=1 + shift + ;; + -v|--verify) + mode_verify=1 + shift + ;; + --) + shift + break + ;; + -*|--*) + msg_error "Invalid argument: ${1}" >&2 + exit 1 + ;; + *) + packages+=("${2}") + shift + ;; + esac +done + +set -- "${packages[@]}" + +if [[ -z ${env_name} ]] && [[ ${mode_install} == 0 ]]; then + msg_error "No environment specified. (-e {name}, required)" + exit 1 +fi + +sfpm_index_create +sfpm_env_create "${env_name}" +sfpm_install "${env_name}" $(sfpm_index_search nasm) # "nasm" "2.14.02" "1" +sfpm_install "${env_name}" $(sfpm_index_search zlib) +sfpm_install "${env_name}" $(sfpm_index_search expat) # "expat" "2.2.6" "1" +sfpm_install "${env_name}" $(sfpm_index_search python) # "python" "3.7.2" "1" diff --git a/bin/sfpm_makepkg b/bin/sfpm_makepkg new file mode 100755 index 0000000..ff6d2be --- /dev/null +++ b/bin/sfpm_makepkg @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +# Deny execution as root user +uid=$(id -u) +username=$(whoami) +if [[ ${uid} == 0 ]] || [[ ${username} == root ]]; then + msg_error "$(basename ${0}) should be executed by a regular user, not with root." + exit 1 +fi + +unset uid +unset username + +export SFPM_MAKEPKG_ENV=$(basename $(mktemp -u sfpm.makepkg.XXXXXX)) +export sfpm_build_scriptdir=$(pwd) + +source "$(dirname ${BASH_SOURCE[0]})/../share/sfpm/common.sh" +source "${sfpm_internal_include}/build.sh" + +# --- Functions + +cleanup() { + if [[ ${buildroot} == *${sfpm_tmpdir}* ]]; then + msg "Removing ${buildroot}" + rm -rf "${buildroot}" + fi + + if [[ $(sfpm_env_exists ${SFPM_MAKEPKG_ENV}) ]]; then + deactivate + sfpm_env_remove "${SFPM_MAKEPKG_ENV}" + fi +} +trap cleanup EXIT SIGINT SIGTERM + +# --- Main + +# Assimilate build definition +msg "Sourcing build script" +source ${1} + +# Sanity checks +msg "Validating build script" +sfpm_check_required_keys + +# Create buildroot +buildroot=$(sfpm_gen_buildroot) +root="${buildroot}/root" +pkgdir="${buildroot}/pkg" +srcdir="${buildroot}/src" + +mkdir -p "${root}" "${pkgdir}" "${srcdir}" + +# Generate temporary sfpm build environment +sfpm_env_create "${SFPM_MAKEPKG_ENV}" + +# Activate temporary sfpm build environment (provides ${SFPM_ENV}) +source ${sfpm_envdir}/${SFPM_MAKEPKG_ENV}/bin/activate + +# Setup compiler/linker flags +sfpm_build_cflags="-I${SFPM_ENV}/include ${sfpm_build_cflags}" +sfpm_build_ldflags="-L${SFPM_ENV}/lib ${sfpm_build_ldflags}" + +# Ensure local dependencies resolve during build +export LD_LIBRARY_PATH="${SFPM_ENV}/lib" + +msg "Executing tasks" +pushd "${root}" + sfpm_build_env_do_depends "${SFPM_MAKEPKG_ENV}" + sources_fetch + sfpm_sources_cmp_sha256 + sources_extract "${srcdir}" + prepare + build + check + package + sfpm_gen_packages +popd + |