Skip to content

Commit

Permalink
Build process: Support building packages with DESTDIR.
Browse files Browse the repository at this point in the history
That is, support building packages when Click was installed into a DESTDIR
different from its eventual home.  Requested by Sascha Alexander Jopen.

Signed-off-by: Eddie Kohler <ekohler@gmail.com>
  • Loading branch information
kohler committed Nov 9, 2011
1 parent 2a5c0d4 commit 399461b
Show file tree
Hide file tree
Showing 15 changed files with 255 additions and 160 deletions.
42 changes: 28 additions & 14 deletions click-buildtool.in
Expand Up @@ -20,12 +20,13 @@
# notice is a summary of the Click LICENSE file; the license in that file is
# legally binding.

set_clickbuild () {
clickbuild_prefix="`echo "$1" | sed 's,/$,,'`"
clickbuild_clickdatadir="@clickbuild_clickdatadir@"
}

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
datarootdir=@datarootdir@
datadir=@datadir@
clickdatadir=@clickdatadir@
set_clickbuild "$prefix"
LINUXMODULE_2_6=@LINUXMODULE_2_6@
gmake=@GMAKE@

Expand Down Expand Up @@ -263,7 +264,7 @@ $provisions"; shift 1;;
provisions="`elementmap_provisions "$emap"`
$provisions"; shift 1;;
-P|--pa|--pac|--pack|--packa|--packag|--package)
provisions="`elementmap_provisions "${clickdatadir}/elementmap.xml"`
provisions="`elementmap_provisions "${clickbuild_clickdatadir}/elementmap.xml"`
$provisions"; shift 1;;
-h|--h|--he|--hel|--help)
cat <<'EOF' 1>&2
Expand Down Expand Up @@ -1014,7 +1015,7 @@ provides_usage () {
provides () {
provisions="$default_provisions
$driver_provisions
"`elementmap_provisions ${clickdatadir}/elementmap.xml`
"`elementmap_provisions ${clickbuild_clickdatadir}/elementmap.xml`
requirements=""
stdin=n; query=n; print=n
while [ x"$1" != x ]; do
Expand Down Expand Up @@ -1261,7 +1262,7 @@ EOF
esac
done

echo "include ${clickdatadir}/pkg-linuxmodule-26.mk"
echo "include ${clickbuild_clickdatadir}/pkg-linuxmodule-26.mk"
}


Expand Down Expand Up @@ -1374,8 +1375,8 @@ top_builddir = .
PACKAGE_CFLAGS = $cflags
PACKAGE_CXXFLAGS = $cflags
include ${clickdatadir}/config.mk
include ${clickdatadir}/pkg-Makefile" > Makefile
include ${clickbuild_clickdatadir}/config.mk
include ${clickbuild_clickdatadir}/pkg-Makefile" > Makefile

test -z "$quiet" && echo "+" $gmake $pkg$osuffix
$gmake $quiet $pkg$osuffix
Expand Down Expand Up @@ -1474,6 +1475,12 @@ BEGIN {
# MAIN PROGRAM #
################

main_usage () {
echo "Usage: click-buildtool TOOLNAME [ARGUMENTS]
Try 'click-buildtool --help' for more information." 1>&2
exit 1
}

if test $# = 0; then
# force usage message
set crapfunc
Expand All @@ -1488,13 +1495,21 @@ Copyright (c) 2000-2001 Massachusetts Institute of Technology
Copyright (c) 2000-2004 Mazu Networks, Inc.
Copyright (c) 2001-2003 International Computer Science Institute
Copyright (c) 2004-2007 Regents of the University of California
Copyright (c) 2000-2011 Eddie Kohler
This is free software; see the source for copying conditions.
There is NO warranty, not even for merchantability or fitness for a
particular purpose.
EOF
exit 0;;
-V|--verb|--verbo|--verbos|--verbose)
verbose=1; shift 1;;
-C|--cl|--cli|--clic|--click|--clickp|--clickpr|--clickpre|--clickpref|--clickprefi|--clickprefix)
test $# -lt 2 && main_usage
shift 1; set_clickbuild "$1"; shift 1;;
-C*)
set_clickbuild "`echo "$1" | sed 's/^-C//`"; shift 1;;
--cl=*|--cli=*|--clic=*|--click=*|--clickp=*|--clickpr=*|--clickpre=*|--clickpref=*|--clickprefi=*|--clickprefix=*)
set_clickbuild "`echo "$1" | sed 's/^[^=]*=//'`"; shift 1;;
-h|--h|--he|--hel|--help)
cat <<'EOF' 1>&2
'Click-buildtool' is a set of tools used when building Click. For information
Expand All @@ -1517,6 +1532,7 @@ Usage: click-buildtool elem2make [-V] [-p PREFIX] < [ELEMENTS]
Options:
-V, --verbose Print more information.
-h, --help Print this message and exit.
-C, --clickprefix PFX Set the prefix for locating data files.
--version Print version number and exit.
Report bugs to <click@pdos.lcs.mit.edu>.
Expand Down Expand Up @@ -1546,7 +1562,7 @@ EOF
shift 1; ksyms "$@"; exit 0;;
shortensyms)
shift 1; shortensyms "$@"; exit 0;;
--c|--cf|--cfl|--cfla|--cflag|--cflags|--d|--de|--def|--defs)
--cf|--cfl|--cfla|--cflag|--cflags|--d|--de|--def|--defs)
echo @PROPER_INCLUDES@ @PCAP_INCLUDES@ -I@includedir@; exit 0;;
--o|--ot|--oth|--othe|--other|--otherl|--otherli|--otherlib|--otherlibs)
echo @PROPER_LIBS@ @PCAP_LIBS@ @DL_LIBS@ @SOCKET_LIBS@ @PTHREAD_LIBS@ @POSIX_CLOCK_LIBS@;
Expand All @@ -1556,8 +1572,6 @@ EOF
--tooll|--toolli|--toollib|--toollibs)
echo -L@libdir@ -lclicktool @DL_LIBS@ @SOCKET_LIBS@ @POSIX_CLOCK_LIBS@; exit 0;;
*)
echo "Usage: click-buildtool TOOLNAME [ARGUMENTS]
Try 'click-buildtool --help' for more information." 1>&2
exit 1;;
main_usage;;
esac
done
17 changes: 13 additions & 4 deletions config.mk.in
@@ -1,12 +1,21 @@
clickprefix=@prefix@
clickbindir=@bindir@
clicksbindir=@sbindir@
clicklibdir=@libdir@
clickincludedir=@includedir@
clickdatadir=@clickdatadir@
clickincludedir=@includedir@
clicklibdir=@libdir@
clicksbindir=@sbindir@
clicksrcdir=@clickdatadir@/src

clickbuild_bindir=@clickbuild_bindir@
clickbuild_datadir=@clickbuild_clickdatadir@
clickbuild_includedir=@clickbuild_includedir@
clickbuild_libdir=@clickbuild_libdir@
clickbuild_sbindir=@clickbuild_sbindir@
clickbuild_srcdir=@clickbuild_clickdatadir@/src

clicklinux_builddir=@linux_builddir@
clicklinux_srcdir=@linux_srcdir@
clicksrcdir=@clickdatadir@/src

CLICK_HAVE_USERLEVEL_DRIVER=@HAVE_USERLEVEL_DRIVER@
CLICK_HAVE_LINUXMODULE_DRIVER=@HAVE_LINUXMODULE_DRIVER@
CLICK_HAVE_BSDMODULE_DRIVER=@HAVE_BSDMODULE_DRIVER@
Expand Down
101 changes: 65 additions & 36 deletions configure
Expand Up @@ -602,6 +602,13 @@ ac_includes_default="\
ac_header_list=
ac_subst_vars='LTLIBOBJS
provisions
clickbuild_sbindir
clickbuild_libdir
clickbuild_includedir
clickbuild_datadir
clickbuild_clickdatadir
clickbuild_bindir
clickdatadir
POD2MAN
TEXI2DVI
MAKEINFO
Expand Down Expand Up @@ -643,7 +650,6 @@ HAVE_LINUXMODULE_DRIVER
HAVE_USERLEVEL_DRIVER
DRIVERS
POSSIBLE_DRIVERS
clickdatadir
LINUXMODULE_2_6
EXTRA_TOOL_OBJS
EXTRA_DRIVER_OBJS
Expand Down Expand Up @@ -7357,7 +7363,7 @@ else

ac_cv_endian=0
cat > conftest.$ac_ext <<EOF
#line 7360 "configure"
#line 7366 "configure"
#include "confdefs.h"
#include <$endian_hdr>
#ifdef __BYTE_ORDER
Expand Down Expand Up @@ -9768,40 +9774,6 @@ done



shell_expand () {
val=`eval echo '$'"$1"`
while echo "x$val" | grep '\$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
eval "$1='$val'"
}

test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

shell_expand bindir
shell_expand sbindir
shell_expand libdir
shell_expand datarootdir
shell_expand datadir
shell_expand includedir

clickdatadir="$datadir/click"


cat >>confdefs.h <<_ACEOF
#define CLICK_BINDIR "$bindir"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define CLICK_LIBDIR "$libdir"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define CLICK_DATADIR "$clickdatadir"
_ACEOF




POSSIBLE_DRIVERS=
for i in bsdmodule linuxmodule ns userlevel; do
test -f $srcdir/$i/Makefile.in && POSSIBLE_DRIVERS="$POSSIBLE_DRIVERS $i"
Expand Down Expand Up @@ -12244,6 +12216,63 @@ fi



shell_expand () {
val=`eval echo '$'"$1"`
while echo "x$val" | grep '\$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
val=`echo "$val" | sed 's,//*,/,g'`
eval "$1='$val'"
}

shell_mkbuild () {
val=`eval echo '$'"$1"`
pval="$prefix"
while test -n "$pval" -a -n "$val"; do
component=`echo "$val" | sed 's,^\(/[^/]*\).*,\1,'`
pcomponent=`echo "$pval" | sed 's,^\(/[^/]*\).*,\1,'`
if test "$component" != "$pcomponent"; then break; fi
val=`echo "$val" | sed 's,^/[^/]*,,'`
pval=`echo "$pval" | sed 's,^/[^/]*,,'`
done
while test -n "$pval"; do
val="/..$val"
pval=`echo "$pval" | sed 's,^/[^/]*,,'`
done
eval "clickbuild_$1='"'$'"{clickbuild_prefix}$val'"
}

test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

clickdatadir="$datadir/click"

for i in bin clickdata data dataroot include lib sbin; do
shell_expand ${i}dir
shell_mkbuild ${i}dir
done

cat >>confdefs.h <<_ACEOF
#define CLICK_BINDIR "$bindir"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define CLICK_LIBDIR "$libdir"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define CLICK_DATADIR "$clickdatadir"
_ACEOF












provisions="$target_cpu"
case "$target_cpu" in
i386) :;;
Expand Down
84 changes: 55 additions & 29 deletions configure.in
Expand Up @@ -972,35 +972,6 @@ dnl
AC_CHECK_HEADERS([ifaddrs.h linux/if_tun.h net/if_dl.h net/if_tap.h net/if_tun.h net/if_types.h net/bpf.h netpacket/packet.h])


dnl
dnl set path variables
dnl

shell_expand () {
val=`eval echo '$'"$1"`
while echo "x$val" | grep '\$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
eval "$1='$val'"
}

dnl Preset $prefix and $exec_prefix.
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

shell_expand bindir
shell_expand sbindir
shell_expand libdir
shell_expand datarootdir
shell_expand datadir
shell_expand includedir

clickdatadir="$datadir/click"
AC_SUBST(clickdatadir)

AC_DEFINE_UNQUOTED(CLICK_BINDIR, "$bindir")
AC_DEFINE_UNQUOTED(CLICK_LIBDIR, "$libdir")
AC_DEFINE_UNQUOTED(CLICK_DATADIR, "$clickdatadir")


dnl
dnl possible drivers
dnl
Expand Down Expand Up @@ -1662,6 +1633,61 @@ AC_SUBST(INSTALL_INFO)
AC_SUBST(POD2MAN)


dnl
dnl set path variables
dnl The "click" versions are expanded versions of the final install locations.
dnl The "clickbuild_" versions are partially expanded versions, with an initial
dnl "clickprefix" replaced by "${clickbuild_prefix}".
dnl

shell_expand () {
val=`eval echo '$'"$1"`
while echo "x$val" | grep '\$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
val=`echo "$val" | sed 's,//*,/,g'`
eval "$1='$val'"
}

shell_mkbuild () {
val=`eval echo '$'"$1"`
pval="$prefix"
while test -n "$pval" -a -n "$val"; do
component=`echo "$val" | sed 's,^\(/[[^/]]*\).*,\1,'`
pcomponent=`echo "$pval" | sed 's,^\(/[[^/]]*\).*,\1,'`
if test "$component" != "$pcomponent"; then break; fi
val=`echo "$val" | sed 's,^/[[^/]]*,,'`
pval=`echo "$pval" | sed 's,^/[[^/]]*,,'`
done
while test -n "$pval"; do
val="/..$val"
pval=`echo "$pval" | sed 's,^/[[^/]]*,,'`
done
eval "clickbuild_$1='"'$'"{clickbuild_prefix}$val'"
}

dnl Preset $prefix and $exec_prefix.
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

clickdatadir="$datadir/click"

for i in bin clickdata data dataroot include lib sbin; do
shell_expand ${i}dir
shell_mkbuild ${i}dir
done

AC_DEFINE_UNQUOTED(CLICK_BINDIR, "$bindir")
AC_DEFINE_UNQUOTED(CLICK_LIBDIR, "$libdir")
AC_DEFINE_UNQUOTED(CLICK_DATADIR, "$clickdatadir")

AC_SUBST(clickdatadir)
AC_SUBST(clickbuild_bindir)
AC_SUBST(clickbuild_clickdatadir)
AC_SUBST(clickbuild_datadir)
AC_SUBST(clickbuild_includedir)
AC_SUBST(clickbuild_libdir)
AC_SUBST(clickbuild_sbindir)


dnl
dnl Provisions
dnl
Expand Down

0 comments on commit 399461b

Please sign in to comment.