Usage: $progname [options] <outdir> <depends>...
options:
- -t, --exclude-tests exclude test/ directories from ccan modules
- -c, --exclude-configurator exclude configurator. config.h must be
- supplied by another method (eg, autotools)
+ -a, --copy-all copy all files in module tree (not just sources
+ required for build)
+ -b, --build-type=TYPE generate build infrastructure of TYPE
+ (one of 'make', 'make+config', 'automake', 'waf')
EOF
}
# parse options, setting the following flags
-exclude_tests=
-exclude_configurator=
+copy_all=
+build_type=
-opts=$(getopt -o tc --long exclude-tests,exclude-configurator -n $progname \
- -- "$@")
+opts=$(getopt -o ab: --long copy-all,build-type: -n $progname -- "$@")
if [ $? != 0 ]
then
while :
do
case "$1" in
- -t|--exclude-tests)
- exclude_tests=1
+ -a|--copy-all)
+ copy_all=1
shift
;;
- -c|--exclude-configurator)
- exclude_configurator=1
- shift
+ -b|--build-type)
+ build_type="$2"
+ shift 2
;;
--)
shift
exit 1
fi
+# check --build-type argument sanity
+case "$build_type" in
+ ''|'make'|'make+config'|'automake'|'waf')
+ ;;
+ *)
+ echo "Invalid build type '$build_type'" >&2
+ exit 1
+esac
+
srcdir=$(dirname $0)/../
outdir="$1"
shift
# clean up on error
trap 'rm -rf $tmpdir' EXIT
+copy_ccan_module() {
+ module_dir="$1"
+ module_srcdir="$srcdir/$module_dir"
+ module_destdir="$tmpdir/$module_dir"
+
+ if [ -n "$copy_all" ]
+ then
+ # bulk copy
+ mkdir -p "$(dirname "$module_destdir")"
+ cp -a "$module_srcdir" "$module_destdir"
+ else
+ mkdir -p "$module_destdir"
+ # only copy sources & license
+ license="$module_srcdir/LICENSE"
+ cp -a "$module_srcdir"/*.[ch] "$module_destdir"
+ [ -e "$license" ] && cp -a "$license" "$module_destdir"
+ fi
+}
+
# generate list of directories to copy
for module in $modules
do
sort -u |
while read dir
do
- module_srcdir="$srcdir/$dir"
- module_destdir="$tmpdir/$dir"
echo "Adding $dir"
- mkdir -p "$(dirname "$module_destdir")"
- cp -a "$module_srcdir" "$module_destdir"
- if [ -n "$exclude_tests" ]
- then
- rm -rf "$module_destdir/test"
- fi
+ copy_ccan_module $dir
done
# we're done with the dependency-tracking, remove the tool from our
cp "$license_src" "$license_dest"
done
-# add ccan Makefile
echo "Adding build infrastructure"
-cp "$srcdir/Makefile-ccan" "$tmpdir/"
-# add top-level Makefile
-top_makefile="$tmpdir/Makefile"
-cat > "$top_makefile" << EOF
+# generate automake Makefile.am
+automakefile="$tmpdir/Makefile.am"
+if [ "$build_type" = "automake" ]
+then
+ (
+ echo "noinst_LIBRARIES = libccan.a"
+ echo "libccan_a_SOURCES = \\"
+ cd "$tmpdir"
+ find ccan -maxdepth 2 -name '*.[ch]' |
+ sed -e 's,^,\t,;$!s,$, \\,'
+ ) > "$automakefile"
+fi
+
+makefile="$tmpdir/Makefile"
+if [ "$build_type" = "make" -o "$build_type" = "make+config" ]
+then
+ # add ccan Makefile
+ cp "$srcdir/Makefile-ccan" "$tmpdir/"
+
+ # add top-level Makefile
+ cat > "$makefile" << EOF
all: libccan.a
include Makefile-ccan
EOF
+fi
# optionally add configurator, and relevant parts to top-level Makefile
-if [ -z "$exclude_configurator" ]
+if [ "$build_type" = "make+config" ]
then
echo "Adding configurator"
mkdir -p "$tmpdir/tools/configurator"
cp -a "$srcdir/tools/configurator" "$tmpdir/tools/"
- cat >> "$top_makefile" <<EOF
+ cat >> "$makefile" <<EOF
tools/configurator/configurator: tools/configurator/configurator.c
config.h: tools/configurator/configurator Makefile Makefile-ccan
EOF
fi
+if [ "$build_type" = "waf" ]
+then
+ echo "Adding waf wscript"
+ cat > "$tmpdir/wscript" << EOF
+def build(ctx):
+ ctx(features = 'c cstlib',
+ source = ctx.path.ant_glob('**/*.c'),
+ target = 'ccan',
+ includes = '.')
+EOF
+fi
+
mv "$tmpdir" "$outdir"
echo "Done. ccan source tree built in $outdir"