#!/bin/sh
# $NetBSD: pre-build,v 1.18 2024/07/17 14:32:53 jperkin Exp $
#
# Copyright (c) 2007 Joerg Sonnenberger <joerg@NetBSD.org>.
# All rights reserved.
#
# This code was developed as part of Google's Summer of Code 2007 program.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

. /usr/pkg/etc/pbulk.conf

set -e

if [ "${config_version}" != "0.68" ]; then
	echo "Your configuration has version ${config_version}."
	echo "This version of pbulk expects version 0.68."
	exit 1
fi

if [ "$cross_compile" != "no" ]; then
	if [ -z "${target_destdir}" ]; then
		echo "target_destdir must be set for cross-compiling."
		exit 1
	fi
	if [ ! -d "${target_destdir}" ]; then
		echo "target_destdir must exist for cross-compiling."
		exit 1
	fi
	if [ `cd "${target_destdir}" && pwd` = "/" ]; then
		echo "target_destdir must not be / for cross-compiling."
		exit 1
	fi	
	if [ -z "${target_arch}" ]; then
		echo "target_arch must be specified for cross-compiling."
		exit 1
	fi
fi

if [ -d "${bulklog}/meta" ]; then
	echo "Warning: All log files of the previous pbulk run will be"
	echo "removed in 5 seconds. If you want to abort, press Ctrl-C."
	sleep 5
	if [ "${reuse_scan_results}" = yes -a -f "${bulklog}/meta/pscan" ]; then
		echo "Reusing old scan results"
		rm -rf "${bulklog}.old" 2> /dev/null || true
		if [ -d "${bulklog}.old" ]; then
			rm -rf "${bulklog}.old"/* || true
			find "${bulklog}" -maxdepth 1 -mindepth 1 ! -name meta -exec rm -rf {} \; || true
			cp -pr "${bulklog}/." "${bulklog}.old/"
			rm -rf "${bulklog}"/* || true
		else
			mv "${bulklog}" "${bulklog}.old"
		fi
	else
		echo "Removing old scan results"
		rm -rf "${bulklog}"/* || true
	fi
else
	rm -rf "${bulklog}"/* || true
fi

mkdir -p "${bulklog}" "${loc}"

case "${master_mode}" in
[nN][oO])
	# Make sure the prefix is clean before we scan so any
	# preinstalled packages don't affect the scanning process.
	/usr/pkg/libexec/pbulk/client-clean
	;;
[yY][eE][sS])
	# Scanning happens in a worker so we don't need to clean the
	# prefix here; this way you can run pbulk on a system that has
	# packages installed without disrupting those packages.
	;;
*)
	echo "master_mode must be either yes or no."
	exit 1
	;;
esac

# Log common settings...
opsys=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=OPSYS`
os_version=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=OS_VERSION`
os_variant=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=OS_VARIANT`
lower_variant_version=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=LOWER_VARIANT_VERSION`
machine_arch=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=MACHINE_ARCH`
pkgsrc_compiler=`cd ${pkgsrc}/pkgtools/pkg_install && ${make} show-var VARNAME=PKGSRC_COMPILER`

# Check if it is an OS with variants where we would rather use the
# variant name and version rather than common name and version
platform_opsys=${opsys}
platform_os_version=${os_version}
case "$opsys" in
Cygwin | SCO_SV)
	platform_opsys=${os_variant}
	;;
SunOS)
	if [ -n "${os_variant}" ]; then
		platform_opsys=${os_variant}
		platform_os_version=${lower_variant_version}
	fi
	;;
esac


echo "PLATFORM=${platform_opsys} ${platform_os_version}/${machine_arch}" > ${loc}/status
echo "OPSYS=${opsys}" >> ${loc}/status
echo "OS_VERSION=${os_version}" >> ${loc}/status
echo "MACHINE_ARCH=${machine_arch}" >> ${loc}/status
echo "OS_VARIANT=${os_variant}" >> ${loc}/status
echo "LOWER_VARIANT_VERSION=${lower_variant_version}" >> ${loc}/status
echo "COMPILER=${pkgsrc_compiler}" >> ${loc}/status

if [ -f /etc/os-release ]; then
	awk '/^PRETTY_NAME/ {gsub(/\"/, "");print;}' /etc/os-release >> ${loc}/status
fi

date '+BUILD_START_ISO=%Y-%m-%d %H:%M
BUILD_START_DIR=%Y%m%d.%H%M
BUILD_START_EPOCHE=%s' >> ${loc}/status
echo "BASE_URL=${base_url}" >> ${loc}/status
