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