Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/bsd/elftoolchain/dist/tools Add a script from upstr...
details: https://anonhg.NetBSD.org/src/rev/152e033d0f55
branches: trunk
changeset: 365943:152e033d0f55
user: jkoshy <jkoshy%NetBSD.org@localhost>
date: Wed May 04 11:07:43 2022 +0000
description:
Add a script from upstream that assists with importing upstream
Elftoolchain sources.
diffstat:
external/bsd/elftoolchain/dist/tools/netbsd-base-system-import.sh | 230 ++++++++++
1 files changed, 230 insertions(+), 0 deletions(-)
diffs (234 lines):
diff -r 70f8dd53424f -r 152e033d0f55 external/bsd/elftoolchain/dist/tools/netbsd-base-system-import.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/elftoolchain/dist/tools/netbsd-base-system-import.sh Wed May 04 11:07:43 2022 +0000
@@ -0,0 +1,230 @@
+#!/bin/sh
+#
+# Copy files from an Elftoolchain checkout and prepare them for import
+# into the NetBSD 'src' tree.
+#
+# Usage:
+#
+# netbsd-base-system-import.sh [-D] -s SRCDIR -d DISTDIR -m MODULE \
+# [-m MODULE]...
+
+usage() {
+ echo "Usage: $0 [options]"
+ echo
+ echo "Prepare elftoolchain sources for importing into NetBSD src."
+ echo
+ echo "Options:"
+ echo " -D Only show diffs."
+ echo " -d DISTDIR Set the 'dist' directory for the elftoolchain import."
+ echo " Defaults to './dist'."
+ echo " -h Display this help text."
+ echo " -m MODULE A subdirectory of the elftoolchain tree to be"
+ echo " imported, e.g. 'libelf', 'common', 'libdwarf', etc."
+ echo " -s SRCDIR The 'trunk' directory of an elftoolchain checkout."
+ echo " -v Be verbose."
+}
+
+err() {
+ echo ERROR: "$@" 1>&2
+ echo
+ usage
+ exit 1
+}
+
+## Parse options.
+diff_only=NO
+verbose=NO
+options=":d:hs:m:vD"
+while getopts "$options" var; do
+ case $var in
+ d) dstdir="$OPTARG";;
+ h) usage; exit 0;;
+ m) modules="$OPTARG $modules";;
+ s) srcdir="$OPTARG";;
+ v) verbose=YES;;
+ D) diff_only=YES;;
+ '?') err "Unknown option: '-$OPTARG'.";;
+ ':') err "Option '-$OPTARG' expects an argument.";;
+ esac
+ shift $((OPTIND - 1))
+done
+
+[ -n "${srcdir}" ] || err "Option -s must be specified."
+[ -n "${modules}" ] || err "Option -m must be specified at least once."
+
+if [ -z "${dstdir}" ]; then
+ dstdir="./dist"
+fi
+
+[ -d ${srcdir} ] || err "Missing source directory '$srcdir'."
+[ -d ${dstdir} ] || err "Missing destination directory '$dstdir'."
+
+# Verify that the source modules exist.
+for m in ${modules}; do
+ [ -d ${srcdir}/${m} ] || err "Missing source module '${srcdir}/${m}'"
+done
+
+## Helpers.
+rename_svn_id() {
+ sed -e '/\$Id:/ {
+ s/\$Id:/Id:/;
+ s/[ ]*\$//
+ }'
+}
+
+handle_block_comment() {
+ sed -e '/^\/\*-/ { i\
+/* \$NetBSD\$ */\
+
+}'
+}
+
+transform_placeholders() {
+ sed -e \
+'/@ELFTC-DECLARE-DOWNSTREAM-VCSID@/ {
+c \
+#if !defined(__RCSID)\
+#define __RCSID(ID) /**/\
+#endif /* !defined(__RCSID) */
+}' -e \
+'/@ELFTC-DEFINE-ELFTC-VCSID@/ {
+c \
+#ifndef ELFTC_VCSID\
+#define ELFTC_VCSID(ID) /**/\
+#endif
+}' -e \
+'/@ELFTC-USE-DOWNSTREAM-VCSID@/ {
+c \
+__RCSID("$NetBSD: netbsd-base-system-import.sh,v 1.1 2022/05/04 11:07:43 jkoshy Exp $");
+}' -e \
+'/@ELFTC-INCLUDE-SYS-CDEFS@/ {
+c \
+#include <sys/cdefs.h>
+}'
+}
+
+# compare_and_move_or_diff filename generated_temp_file
+compare_and_move_or_diff() {
+ local dstfile=${dstdir}/${1}
+
+ egrep -v '\$NetBSD.*\$' ${2} > ${srccmptmp}
+ egrep -v '\$NetBSD.*\$' ${dstfile} > ${dstcmptmp} 2> /dev/null
+
+ if cmp -s ${srccmptmp} ${dstcmptmp}; then
+ return 0
+ fi
+
+ if [ "${diff_only}" = YES ]; then
+ # Show the changes needed to update the destination.
+ if [ -f ${dstfile} ]; then
+ diff -u ${dstfile} ${2}
+ else
+ echo '--- new file' ${file}
+ diff -u /dev/null ${2}
+ fi
+ else
+ mv ${2} ${dstfile} || exit ${?}
+ changed_file="${1}"
+ fi
+}
+
+# Manual pages need a CVS ID, and renaming of their SVN IDs.
+handle_manual_page() {
+ echo '.\" $NetBSD: netbsd-base-system-import.sh,v 1.1 2022/05/04 11:07:43 jkoshy Exp $' > ${srctmp}
+ echo '.\"' >> ${srctmp}
+ rename_svn_id < ${srcdir}/${1} >> ${srctmp}
+
+ compare_and_move_or_diff ${1} ${srctmp}
+}
+
+# M4 files need a NetBSD RCS Id prepended, and any embedded
+# VCS IDs transformed.
+handle_m4_file() {
+ echo 'dnl $NetBSD: netbsd-base-system-import.sh,v 1.1 2022/05/04 11:07:43 jkoshy Exp $' > ${srctmp}
+ transform_placeholders < ${srcdir}/${1} | \
+ rename_svn_id >> ${srctmp}
+
+ compare_and_move_or_diff ${1} ${srctmp}
+}
+
+# Regular files only need their SVN IDs renamed.
+handle_regular_file() {
+ rename_svn_id < ${srcdir}/${1} > ${srctmp}
+
+ compare_and_move_or_diff ${1} ${srctmp}
+}
+
+# C sources need a NetBSD RCS Id prepended, the
+# ELFTC macros and SVN ids transformed.
+handle_c_source() {
+ handle_block_comment < ${srcdir}/${1} | \
+ transform_placeholders | \
+ rename_svn_id > ${srctmp}
+
+ compare_and_move_or_diff ${1} ${srctmp}
+}
+
+# Prepare temporary files.
+get_temporary_file() {
+ mktemp -p ${TMPDIR:-/tmp} -t import-et.XXXXXX
+}
+
+srctmp=`get_temporary_file`
+srccmptmp=`get_temporary_file`
+dstcmptmp=`get_temporary_file`
+
+trap "rm ${srctmp} ${srcmptmp} ${dstcmptmp};" 0 1 2 3 15
+
+# For each module:
+# - Create new directories in the destination.
+# - For each file in the source directory.
+# - Transform the source file to its imported content.
+# - Ignore files that differ only in RCS
+# - Display diffs or move changed files to the destination directory.
+
+for m in ${modules}; do
+ [ "$verbose" = YES ] && echo Examining module "'$m'".
+
+ # Create any new directories under the destination root.
+ (cd "${srcdir}" && find "${m}" -depth -type d) | \
+ while read dir; do
+ [ "${verbose}" = YES ] && echo "Creating '$dir'."
+ mkdir -p "${dstdir}/${dir}"
+ done
+
+ # Import files, transforming them along the way.
+ (cd "${srcdir}" && find "${m}" -depth -type f $pattern) | \
+ egrep -v '.o$|.a$|.po$|.so$|.swp$|*~$' | \
+ while read file; do
+ changed_file='' # Set by 'compare_and_move_or_diff'.
+
+ if [ "${diff_only}" = NO ]; then
+ [ "${verbose}" = YES ] && echo -n "Importing file '$file'"
+ fi
+
+ case "${file##*/}" in
+ *.[0-9])
+ handle_manual_page "${file}"
+ ;;
+ *.m4 )
+ handle_m4_file "${file}"
+ ;;
+ Makefile | Version.map | *.m4 | *.mk)
+ handle_regular_file "${file}"
+ ;;
+ *.[ch])
+ handle_c_source "${file}"
+ ;;
+ * ) error "Unsupported file: ${file}."
+ ;;
+ esac
+
+ if [ "${diff_only}" = NO -a "${verbose}" = YES ]; then
+ if [ -n "${changed_file}" ]; then
+ echo '- changed.'
+ else
+ echo '- unchanged.'
+ fi
+ fi
+ done
+done
Home |
Main Index |
Thread Index |
Old Index