xref: /netbsd-src/external/bsd/tmux/prepare-import.sh (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1#! /bin/sh
2# $NetBSD: prepare-import.sh,v 1.2 2011/08/17 18:37:59 jmmv Exp $
3#
4# Use this script to recreate the 'dist' subdirectory from a newly released
5# distfile.  The script takes care of unpacking the distfile, removing any
6# files that are not relevant to NetBSD and checking if there are any new
7# files in the new release that need to be addressed.
8#
9# See the README file for general instructions.
10#
11
12set -e
13
14ProgName=${0##*/}
15
16CLEAN_PATTERNS=
17CLEAN_PATTERNS="${CLEAN_PATTERNS} [A-Z]*"
18CLEAN_PATTERNS="${CLEAN_PATTERNS} aclocal.m4"
19CLEAN_PATTERNS="${CLEAN_PATTERNS} etc"
20CLEAN_PATTERNS="${CLEAN_PATTERNS} configure*"
21
22err() {
23	echo "${ProgName}:" "${@}" 1>&2
24	exit 1
25}
26
27log() {
28	echo "${ProgName}:" "${@}"
29}
30
31backup_dist() {
32	if [ -d dist.old ]; then
33		log "Removing dist; dist.old exists"
34		rm -rf dist
35	else
36		log "Backing up dist as dist.old"
37		mv dist dist.old
38	fi
39}
40
41extract_distfile() {
42	local distfile="${1}"; shift
43	local distname="${1}"; shift
44
45	log "Extracting ${distfile}"
46	tar -xzf "${distfile}"
47	[ -d "${distname}" ] || err "Distfile did not create ${distname}"
48	log "Renaming ${distname} to dist"
49	mv "${distname}" dist
50}
51
52get_distname() {
53	local distfile="${1}"; shift
54	basename "${distfile}" | sed -e 's,\.tar.*,,'
55}
56
57cleanup_dist() {
58	log "Removing unnecessary files from dist"
59	( cd dist && rm -rf ${CLEAN_PATTERNS} )
60}
61
62diff_dirs() {
63	local old_dir="${1}"; shift
64	local new_dir="${1}"; shift
65
66	local old_list=$(mktemp -t tmux-import.XXXXXX)
67	local new_list=$(mktemp -t tmux-import.XXXXXX)
68	local diff=$(mktemp -t tmux-import.XXXXXX)
69	trap "rm -f '${old_list}' '${new_list}' '${diff}'; exit 1" \
70	    HUP INT QUIT TERM
71
72	( cd "${old_dir}" && find . | sort >>"${old_list}" )
73	( cd "${new_dir}" && find . | sort >>"${new_list}" )
74
75	diff -u "${old_list}" "${new_list}" | grep '^+\.' >>"${diff}" || true
76	if [ -s "${diff}" ]; then
77		log "New files found"
78		diff -u "${old_list}" "${new_list}" | grep '^+\.'
79		log "Check if any files have to be cleaned up and update" \
80		    "the prepare-import.sh script accordingly"
81	else
82		log "No new files; all good!"
83	fi
84
85	rm -f "${old_list}" "${new_list}" "${diff}"
86}
87
88main() {
89	[ ${#} -eq 1 ] || err "Must provide a distfile name"
90	local distfile="${1}"; shift
91
92	[ -f Makefile -a -f prepare-import.sh ] || \
93	    err "Must be run from the src/external/bsd/tmux subdirectory"
94
95	local distname="$(get_distname ${distfile})"
96
97	backup_dist
98	extract_distfile "${distfile}" "${distname}"
99	cleanup_dist
100	diff_dirs dist.old dist
101	log "Don't forget to update the -D flags in usr.bin/tmux/Makefile" \
102	    "and to update the version in doc/3RDPARTY"
103}
104
105main "${@}"
106