aboutsummaryrefslogtreecommitdiff
path: root/scripts/spmbuild
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2020-02-17 00:13:30 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2020-02-17 00:13:30 -0500
commit1c2cdc4d8e28ce1b4c0d1ba75686f05fd5dd772d (patch)
tree32257d5a12cc0dc06c62e4212806573477065080 /scripts/spmbuild
parentb5dc6f2c428b4555d3e56e628605f54e4a63b16e (diff)
downloadspmc-1c2cdc4d8e28ce1b4c0d1ba75686f05fd5dd772d.tar.gz
Refactor continues:
* Implement multiple manifests * Random bug fixes * More bugs added * Start removing references to SPM_GLOBAL.package_dir * Start using manifests for everything * Simplify mkmanifest_interface
Diffstat (limited to 'scripts/spmbuild')
-rwxr-xr-xscripts/spmbuild87
1 files changed, 59 insertions, 28 deletions
diff --git a/scripts/spmbuild b/scripts/spmbuild
index 0b742b8..feb17eb 100755
--- a/scripts/spmbuild
+++ b/scripts/spmbuild
@@ -75,7 +75,7 @@ function spm_build_initialize_stage1() {
fi
fi
- export SPM_BUILD_STORE_PACKAGES="${SPM_BUILD_STORE}/pkgs/${SPM_BUILD_SYS_TARGET}"
+ export SPM_BUILD_STORE_PACKAGES="${SPM_BUILD_STORE}/pkgs"
if [[ ! -d ${SPM_BUILD_STORE_PACKAGES} ]]; then
mkdir -p "${SPM_BUILD_STORE_PACKAGES}"
if [[ $? != 0 ]]; then
@@ -104,9 +104,10 @@ function spm_build_initialize_stage2() {
unset LDFLAGS
unset FCFLAGS
- export _SPM_BUILD_ROOT_TEMPLATE="spmbuild_root_XXXXXX"
+ # All templates strings MUST be the same length to allow for proper relocation
+ export _SPM_BUILD_ROOT_TEMPLATE="spmbuild_root_XXXXXXXXX"
export _SPM_BUILD_RUNTIME_TEMPLATE="spmbuild_runtime_XXXXXX"
- export _SPM_BUILD_PKGDIR_TEMPLATE="spmbuild_pkgdir_XXXXXX"
+ export _SPM_BUILD_PKGDIR_TEMPLATE="spmbuild_pkgdir_XXXXXXX"
export SPM_BUILD_ROOT_BASE=$(mktemp -d -t "${_SPM_BUILD_ROOT_TEMPLATE}")
export SPM_BUILD_ROOT="${SPM_BUILD_ROOT_BASE}/${SPM_META_PREFIX_PLACEHOLDER}"
@@ -127,17 +128,19 @@ function spm_build_initialize_stage2() {
exit 1
fi
- # _pkgdir does not need a placeholder prefix
export SPM_BUILD_PKGDIR_BASE=$(mktemp -d -t "${_SPM_BUILD_PKGDIR_TEMPLATE}")
- export SPM_BUILD_PKGDIR="${SPM_BUILD_PKGDIR_BASE}"
+ export SPM_BUILD_PKGDIR="${SPM_BUILD_PKGDIR_BASE}/${SPM_META_PREFIX_PLACEHOLDER}"
export _pkgdir="${SPM_BUILD_PKGDIR}"
+
+ mkdir -p "${SPM_BUILD_PKGDIR}"
if [[ ! -d ${SPM_BUILD_PKGDIR} ]]; then
msg_error "SPM_BUILD_PKGDIR creation failed: ${SPM_BUILD_PKGDIR}"
exit 1
fi
# _prefix is a not a real path. do not create it!
- export SPM_BUILD_PREFIX="/${SPM_META_PREFIX_PLACEHOLDER}"
+ # _prefix is double-wide
+ export SPM_BUILD_PREFIX="/${SPM_META_PREFIX_PLACEHOLDER}${SPM_META_PREFIX_PLACEHOLDER}"
export _prefix="${SPM_BUILD_PREFIX}"
export SPM_BUILD_CRUMBS="${SPM_BUILD_PREFIX} ${SPM_BUILD_ROOT} ${SPM_BUILD_RUNTIME} ${SPM_BUILD_PKGDIR}"
@@ -153,13 +156,14 @@ function spm_build_initialize_stage2() {
}
function spm_build_cleanup() {
+ #:
[[ -d ${SPM_BUILD_ROOT_BASE} ]] && rm -rf ${SPM_BUILD_ROOT_BASE}
[[ -d ${SPM_BUILD_RUNTIME_BASE} ]] && rm -rf ${SPM_BUILD_RUNTIME_BASE}
[[ -d ${SPM_BUILD_PKGDIR_BASE} ]] && rm -rf ${SPM_BUILD_PKGDIR_BASE}
}
function spm_build_install() {
- ${SPM} --manifest "${SPM_BUILD_STORE_PACKAGES}/manifest.dat" --install $@ --root "${SPM_BUILD_RUNTIME}"
+ ${SPM} --verbose --manifest "${SPM_BUILD_STORE_PACKAGES}" --install $@ --root "${SPM_BUILD_RUNTIME}"
}
function spm_build_mkprefixbin() {
@@ -217,7 +221,7 @@ function spm_build_fetch() {
pushd ${tmpdir}
# file already exists?
- if [[ -f ${2}/$(basename ${1}) ]]; then
+ if [[ -f "${2}/$(basename ${1})" ]]; then
return
fi
@@ -240,7 +244,8 @@ function spm_build_do_sources() {
function spm_build_mkdepends() {
local filename="${1}"
- local deps=($@)
+ shift
+ local deps=("$@")
touch "${filename}"
for dep in "${deps[@]}"; do
@@ -248,6 +253,10 @@ function spm_build_mkdepends() {
done
}
+function spm_build_filelist() {
+ :
+}
+
function prepare() {
# stub
:
@@ -265,14 +274,35 @@ function package() {
function spm_build_do_stage_prepare() {
prepare
+ set +x
}
function spm_build_do_stage_build() {
build
+ set +x
}
function spm_build_do_stage_package() {
package
+ set +x
+}
+
+function spm_build_do_stage_archive() {
+ local archive="${1}"
+
+ pushd "${SPM_BUILD_PKGDIR}"
+ # Enter the "prefix" (i.e. strip off the leading slash)
+ pushd "${SPM_BUILD_PREFIX#\/}"
+ msg2 "Recording binary prefixes..."
+ spm_build_mkprefixbin "${SPM_META_PREFIX_BIN}" . ${SPM_BUILD_CRUMBS}
+ msg2 "Recording text prefixes..."
+ spm_build_mkprefixtext "${SPM_META_PREFIX_TEXT}" . ${SPM_BUILD_CRUMBS}
+ msg2 "Recording dependencies..."
+ spm_build_mkdepends "${SPM_META_DEPENDS}" "${depends[@]}"
+ msg2 "Archiving files..."
+ tar cfz "${archive}" .
+ popd
+ popd
}
# -- main --
@@ -294,6 +324,11 @@ spm_build_initialize_stage2 # post-runtime activation
msg2 "Sourcing build script..."
source "${SPM_BUILD_SCRIPT_ROOT}/${SPM_BUILD_SCRIPT}"
+# Declare package metadata we need at this level
+package_name="${name}-${version}-${revision}"
+package_archive="${package_name}$(spm_build_get_package_ext)"
+package_final="${SPM_BUILD_STORE_PACKAGES}/${SPM_BUILD_SYS_TARGET}/${package_archive}"
+
msg2 "Downloading source files..."
spm_build_do_sources "${package_name}"
@@ -301,20 +336,24 @@ msg3 "Copying source files..."
rsync -avi "${SPM_BUILD_STORE_SOURCES}/${package_name}/" "${SPM_BUILD_ROOT}"
rsync -avi --exclude "${SPM_BUILD_SCRIPT}" "${SPM_BUILD_SCRIPT_ROOT}/" "${SPM_BUILD_ROOT}"
-package_name="${name}-${version}-${revision}"
-package_archive="${package_name}$(spm_build_get_package_ext)"
+ls -l "${SPM_BUILD_ROOT}"
-msg "Building ${package_name}"
+msg "Environment data"
+printenv | grep -E '^SPM_' | sort
+msg "Processing ${package_name}"
+
+set -e
if [[ ${#build_depends[@]} != 0 ]]; then
+ msg2 "Installing build dependencies"
spm_build_install "${build_depends[@]}"
fi
-if [[ ${#deps[@]} != 0 ]]; then
- spm_build_install "${deps[@]}"
+if [[ ${#depends[@]} != 0 ]]; then
+ msg2 "Installing runtime dependencies"
+ spm_build_install "${depends[@]}"
fi
-set -e
pushd "${SPM_BUILD_ROOT}"
msg2 "prepare()"
spm_build_do_stage_prepare
@@ -324,20 +363,12 @@ pushd "${SPM_BUILD_ROOT}"
spm_build_do_stage_package
popd
-package_final="${SPM_BUILD_STORE_PACKAGES}/${package_archive}"
-msg "Generating package: ${package_final}"
-pushd "${SPM_BUILD_PKGDIR}"
- pushd "${SPM_META_PREFIX_PLACEHOLDER}"
- spm_build_mkprefixbin "${SPM_META_PREFIX_BIN}" . ${SPM_BUILD_CRUMBS}
- spm_build_mkprefixtext "${SPM_META_PREFIX_TEXT}" . ${SPM_BUILD_CRUMBS}
- spm_build_mkdepends "${SPM_META_DEPENDS}" "${depends[@]}"
- tar cfz "${package_final}" .
- popd
-popd
-set +e
-msg2 "Updating build manifest:"
+msg "Create package: ${package_final}"
+spm_build_do_stage_archive "${package_final}"
+
+msg "Update manifest:"
spm_build_mkmanifest "${SPM_BUILD_STORE_PACKAGES}" "${SPM_BUILD_STORE_PACKAGES}"
-msg "Cleaning up..."
+msg "Clean"
spm_build_cleanup