source: hybrid/branches/releng-10/nanobsd/tools/package-build.sh@ 12525

Last change on this file since 12525 was 12218, checked in by rick, 12 years ago

Ports now uses different way of setting arguments.

Also see: https://wiki.freebsd.org/Ports/Options/OptionsNG#What_users_need_to_know

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
File size: 4.3 KB
Line 
1#!/bin/sh
2# Install all required packages
3#
4# XXX: Welcome to port hell, if /usr/ports has been updated, you actually want
5# to delete all installed packages and start over again, hence why people used
6# to run this stuff in jails, etc.
7#
8# Rick van der Zwet <rick@wirelessleiden.nl>
9#
10
11. `dirname $0`/package-build.inc.sh
12
13DEBUG=${DEBUG:-'0'}
14DEP_CHECK_ONLY=${DEP_CHECK_ONLY:-'0'}
15
16# make options, for package building
17LOGDIR=`mktemp -d /tmp/$(basename $0 .sh)-$(date '+%Y%m%d-%H:%M:%S')X`
18
19p_info Log directory ${LOGDIR}
20p_info Make arguments are:
21p_info `p_list ${PKG_MAKE_ARGS}`
22p_info Make configuration is:
23echo "${PKG_MAKE_CONF}" | sed 's/^/## /'
24
25# HACK: install our own ports _inside_ the normal ports dir
26cp -fR $WL_PORTSDIR/* $PORTSDIR || exit 1
27
28# Pre-req dependency fixing
29p_info Checking whether there are currently unmet dependencies
30RETVAL=0
31PKGS=`pkg_info | awk '{print $1}'`
32for PKG in ${PKGS} ; do
33 PKG_DEP_FAIL=""
34 for PKGDEP in `pkg_info -qr ${PKG} | awk '{print $2}'`; do
35 pkg_info -e ${PKGDEP}
36 if [ $? -eq 1 ]; then
37 PKG_DEP_FAIL="${PKG_DEP_FAIL} ${PKGDEP}"
38 fi
39 done
40 if [ -n "${PKG_DEP_FAIL}" ]; then
41 p_err Unmet dependencies found at $PKG, please fix manually:
42 p_err `p_list ${PKG_DEP_FAIL}`
43 RETVAL=1
44 fi
45done
46if [ $RETVAL -eq 1 ]; then
47 exit 1
48fi
49p_info Dependecy check ok
50
51if [ ${DEP_CHECK_ONLY} -eq 1 ]; then
52 exit 0
53fi
54echo ""
55
56
57# Cleanup of old packages
58if [ -d "${NANO_PACKAGE_DIR}" ]; then
59 p_warn "Deleted all (old) packages at ${NANO_PACKAGE_DIR}"
60 rm -R ${NANO_PACKAGE_DIR}/*
61fi
62p_info Created target dir ${NANO_PACKAGE_DIR}
63mkdir -p ${NANO_PACKAGE_DIR}
64
65
66# Build required packages
67MAKE_CONF=`mktemp -t $(basename $0)`
68echo "${PKG_MAKE_CONF}" > $MAKE_CONF
69MAKE="make __MAKE_CONF=$MAKE_CONF ${PKG_MAKE_ARGS}"
70BUILD_LIST=''
71set `echo ${PACKAGE_LIST} | xargs -n1 -I% echo $PORTSDIR/%`
72while [ "$1" ]; do
73 PACKAGE=$1; shift
74 BUILD_LIST="${BUILD_LIST} ${PACKAGE}"
75
76 # Build new one
77 LOGFILE="$LOGDIR/build_`echo $PACKAGE | tr '/' '_'`.log"
78 echo ""
79 p_info Packaging $PACKAGE
80 cd $PACKAGE || exit 1
81
82 # Check for build dependencies
83 BUILDDEP_PKG=`${MAKE} build-depends-list | awk -F: '{print $2}'`
84 if [ -n "${BUILDDEP_PKG}" ]; then
85 p_info Build dependencies needed are:
86 p_info `p_list ${BUILDDEP_PKG}`
87 fi
88
89 # Check for run dependencies
90 PKGDEP_PKGS=`${MAKE} package-depends-list | awk '{print $2}'`
91 if [ -n "${PKGDEP_PKGS}" ]; then
92 p_info Package dependencies also packaged are:
93 p_info `p_list ${PKGDEP_PKGS}`
94 fi
95
96 # Check if package is already installed
97 VERSION=`${MAKE} clean generate-plist check-already-installed | awk '/is already/ {print $2}'`
98 if [ -n "$FORCE_REBUILD" ]; then
99 p_warn "${PACKAGE} forcefullly rebuilding..."
100 MAKE_OPTION='deinstall reinstall'
101 elif [ "${VERSION}" = "An" ]; then
102 p_warn "${PACKAGE} outdated, please update"
103 #XXX: Better way to detect whether a package needs updating
104 # An older version of lang/python26 is already installed (python26-2.6.2)
105 #XXX: Broken updatin, please fix
106 #p_warn "re-run package-build.sh to check for unmet ones done using:"
107 #p_warn "$0"
108 #MAKE_OPTION='deinstall reinstall'
109 MAKE_OPTION=''
110 elif [ -n "${VERSION}" ]; then
111 VERSION=`echo ${VERSION} | sed 's/^.*-//g'`
112 p_info ${PACKAGE} already installed at ${VERSION}
113 MAKE_OPTION=''
114 else
115 p_info ${PACKAGE} not installed, installing...
116 MAKE_OPTION='install'
117 fi
118
119 if [ -n "${MAKE_OPTION}" ]; then
120 p_info Buildlog: $LOGFILE
121 ${MAKE} ${MAKE_OPTION} 2>>$LOGFILE 1>> $LOGFILE
122 if [ $? -ne 0 ]; then
123 p_err building ${PACKAGE} FAILED, logging at $LOGFILE
124 exit 1
125 fi
126 fi
127 ${MAKE} package-links
128 PKGNAME=`${MAKE} extract-message | awk '{print $NF}'`
129 pkg_create -b $PKGNAME ${NANO_PACKAGE_DIR}/${PKGNAME}.tbz || exit 1
130
131 p_info Checking dependencies
132 for PKG in $PKGDEP_PKGS; do
133 echo "${BUILD_LIST}" | grep -q "$PKG"
134 if [ $? -eq 0 ]; then
135 # Already packaged
136 p_info ${PKG} Already packaged
137 else
138 echo $@ | grep -q "${PKG}"
139 if [ $? -eq 0 ]; then
140 p_info ${PKG} Already planned
141 else
142 set $@ ${PKG}
143 fi
144 fi
145 done
146 p_info Packaging $PACKAGE succesfull
147done
148
149p_info `echo ${BUILD_LIST} | wc -w` packages build succesfully
150
151if [ ${DEBUG} -eq 0 ]; then
152 rm -R ${LOGDIR}
153else
154 p_info Debugging enabled ${LOGDIR} saved
155fi
156
157# House keeping
158rm $MAKE_CONF
159
Note: See TracBrowser for help on using the repository browser.