Merge from vendor branch TNF:
[pkgsrcv2.git] / bootstrap / mkbinarykit
1 #!/bin/sh
2
3 # $NetBSD: mkbinarykit,v 1.11 2005/01/16 03:02:02 grant Exp $
4 #
5 # Make a binary bootstrap kit and place it in targetdir (or current
6 # working directory if not specified). The mk.conf.example file is
7 # copied to /etc/mk.conf (or /etc/mk.conf.example on systems which
8 # may already have a /etc/mk.conf file) or to the location specified
9 # by using --mkconf. Run this program from the pkgsrc/bootstrap
10 # directory.
11
12 usage="Usage: $0 "'
13         [ --force ] [ --targetdir=<tar target dir> ] [ --mkconf=<target> ]
14         [ --no-build ] [ --workdir=<work dir> ] [ bootstrap script arguments ]'
15
16 opsys=`uname -s`
17 osrev=`uname -r`
18 ospro=`uname -p`
19 date=`date +%Y%m%d`
20
21 prefix=/usr/pkg
22 sysconfdir=/etc
23 pkgdbdir=/var/db/pkg
24 mkfile=$sysconfdir/mk.conf
25 ignorecasecheck=no
26 ignoreusercheck=no
27 force=no
28 build=yes
29 targetdir=`pwd`
30 wrkdir=work             # default: relative to pkgsrc/bootstrap
31
32 sedprog="sed" 
33
34 case "$opsys" in
35 AIX)
36         syscondir=$prefix/etc
37         mkfile=$sysconfdir/mk.conf
38         pkgdbdir=$prefix/pkgdb
39         ;;
40 DragonFly)
41         # Don't use the ports /var/db/pkg
42         pkgdbdir=$prefix/pkgdb
43         ;;
44 FreeBSD)
45         # Don't use the ports /var/db/pkg
46         pkgdbdir=$prefix/pkgdb
47         ;;
48 Interix)
49         mkfile=$sysconfdir/mk.conf.example
50         # Don't use the interopsystems.com package dir
51         pkgdbdir=$prefix/pkgdb
52         ospro=i386
53         ;;
54 NetBSD)
55         # Don't overwrite the system's mk.conf
56         mkfile=$sysconfdir/mk.conf.example
57         ;;
58 OpenBSD)
59         # Don't overwrite the system's mk.conf
60         mkfile=$sysconfdir/mk.conf.example
61         # Don't use the ports /var/db/pkg
62         pkgdbdir=$prefix/pkgdb
63         # Use "arch -s" instead of uname -p
64         ospro=`arch -s`
65         ;;
66 SunOS)
67         sedprog=/usr/xpg4/bin/sed
68         ;;
69 esac
70
71 while [ $# -gt 0 ]; do
72         case $1 in
73         --force)        force=yes ;;
74         --no-build)     build=no ;;
75         --targetdir=*)  targetdir=`echo $1 | $sedprog -e 's|--targetdir=||'` ;;
76         --prefix=*)     prefix=`echo $1 | $sedprog -e 's|--prefix=||'` ;;
77         --mkconf=*)     mkfile=`echo $1 | $sedprog -e 's|--mkconf=||'` ;;
78         --pkgdbdir=*)   pkgdbdir=`echo $1 | $sedprog -e 's|--pkgdbdir=||'` ;;
79         --ignore-case-check) ignorecasecheck=yes ;;
80         --ignore-user-check) ignoreusercheck=yes ;;
81         --workdir=*)    wrkdir=`echo $1 | $sedprog -e 's|--workdir=||'` ;;
82         --*)            echo "$usage"; exit 1 ;;
83         esac
84         shift
85 done
86
87 if [ "$build" = "yes" ] && [ "$force" != "yes" ]; then
88         if [ -d "$prefix" ] || [ -d "$pkgdbdir" ]; then
89                 echo "Some pkgsrc infrastructure exists on this system already."
90                 echo "Use --force to move it out of the way."
91                 exit 1
92         fi
93 elif [ "$build" = "yes" ]; then
94         mv -f "$prefix" "$prefix.$$"
95         mv -f "$pkgdbdir" "$pkgdbdir.$$"
96         mv -f "$mkfile" "$mkfile.$$"
97 fi
98
99 if [ "$build" != "no" ]; then
100
101         # Bootstrap
102         bootstrap_flags="--prefix=$prefix --pkgdbdir=$pkgdbdir --workdir=$wrkdir"
103         if [ "$ignorecasecheck" = "yes" ]; then
104         bootstrap_flags="$bootstrap_flags --ignore-case-check"
105         fi
106
107         if [ "$ignoreusercheck" = "yes" ]; then
108         bootstrap_flags="$bootstrap_flags --ignore-user-check"
109         fi
110
111         echo "Making bootstrap kit with"
112         echo "prefix = $prefix"
113         echo "pkgdbdir = $pkgdbdir"
114         echo "mk.conf.example will be copied to $mkfile"
115         echo ""
116
117         ./cleanup $wrkdir
118         ./bootstrap $bootstrap_flags
119         if [ $? != "0" ]; then
120         echo "Bootstrap error."
121         exit 1;
122         fi
123 fi
124
125 # Make a tar ball
126
127 strip=strip
128 if [ -x /usr/ccs/bin/strip ]; then
129         strip=/usr/ccs/bin/strip
130 fi
131
132 echo "Stripping binaries..."
133 $strip "$prefix/"bin/*
134 $strip "$prefix/"sbin/*
135
136 echo "Making binary kit."
137 PATH="$prefix/bin:$PATH"; export PATH # in case tar was built by bootstrap
138 [ ! -d $sysconfdir ] && mkdir -p $sysconfdir 
139 cp ${wrkdir}/mk.conf.example $mkfile &&                                         \
140 cd / &&                                                                 \
141 tar -hcf "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.tar"   \
142                                         .$prefix .$pkgdbdir .$mkfile && \
143 ls -l "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.tar"