blob: 8de8d24035dad818674fe0c4c7c76c320b167f59 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
set -e
usage() {
cat >&2 << EOF
Usage: generate-all.sh
Execute generate-license-and-notice.sh to generate LICENSE and NOTICE files for all Brooklyn projects.
EOF
}
while [ ! -z "$*" ] ; do
if [ "$1" == "--help" ]; then usage ; exit 0; fi
if [ "$1" == "--loadonly" ]; then
LOAD_ONLY=true
shift
continue
fi
usage
echo Unexpected argument: $1
exit 1
done
REF_DIR=$(pushd $(dirname $BASH_SOURCE) > /dev/null ; pwd -P ; popd > /dev/null)
if [ -z "$PARTS_DIR" ] ; then PARTS_DIR=$REF_DIR/parts ; fi
ROOT_DIR=$REF_DIR/../../..
MVN_OUTFILE=$REF_DIR/notices.autogenerated
prefix_and_join_array() {
PREFIX=$2
JOIN_BEFORE_PREFIX=$1
JOIN_AFTER_PREFIX=$3
echo -n ${PREFIX}$4
shift 4
while (($# >= 1)) ; do
echo -n "${JOIN_BEFORE_PREFIX}${PREFIX}${JOIN_AFTER_PREFIX}$1"
shift
done
}
# takes root dir in first arg, then regex expression
make_for() {
PROJ=$(cd $1 ; pwd -P)
OUT=${PROJ}/$2
MODE=$3
SEARCH_ROOT=$4
ARGS=$5
if [ -z "$SEARCH_ROOT" ] ; then SEARCH_ROOT=$PROJ ; fi
echo Generating for $PROJ mode $MODE to $2...
echo ""
pushd $PROJ > /dev/null
if [ "$MODE" == "binary-additional" ] ; then
$REF_DIR/generate-license-and-notice.sh \
-o $OUT \
--license $PARTS_DIR/license-top \
--license $PARTS_DIR/license-deps \
--notice $PARTS_DIR/notice-top --notice-compute-with-flags "
-DextrasFiles=$(prefix_and_join_array "" ":" "" $(find -L $SEARCH_ROOT -name "license-inclusions-source-*"))
-DonlyExtras=true" \
--notice $PARTS_DIR/notice-additional --notice-compute-with-flags "
-DextrasFiles=$(prefix_and_join_array "" ":" "" $(find -L $SEARCH_ROOT -name "license-inclusions-binary-*"))" \
$ARGS \
--libraries ${REF_DIR} ${SEARCH_ROOT}
elif [ "$MODE" == "binary-primary" ] ; then
$REF_DIR/generate-license-and-notice.sh \
-o $OUT \
--license $PARTS_DIR/license-top \
--license $PARTS_DIR/license-deps \
--notice $PARTS_DIR/notice-top --notice-compute-with-flags "
-DextrasFiles=$(prefix_and_join_array "" ":" "" $(find -L $SEARCH_ROOT -name "license-inclusions-source-*" -or -name "license-inclusions-binary-*"))" \
$ARGS \
--libraries ${REF_DIR} ${SEARCH_ROOT}
elif [ "$MODE" == "binary-omitted" ] ; then
$REF_DIR/generate-license-and-notice.sh \
-o $OUT \
--license $PARTS_DIR/license-top \
--license $PARTS_DIR/license-deps \
--notice $PARTS_DIR/notice-top --notice-compute-with-flags "
-DextrasFiles=$(prefix_and_join_array "" ":" "" $(find -L $SEARCH_ROOT -name "license-inclusions-source-*"))
-DonlyExtras=true" \
$ARGS \
--libraries ${REF_DIR} ${SEARCH_ROOT}
else
echo FAILED - unknown mode $MODE
exit 1
fi
echo ""
popd > /dev/null
}
# build licenses for all the projects
if [ "$LOAD_ONLY" == "true" ] ; then
echo loaded license generation libraries
else
# include deps in files pulled in to Go CLI binary builds
make_for $ROOT_DIR/brooklyn-client/cli/ release/license/files binary-primary
make_for $ROOT_DIR/brooklyn-client/cli/ . binary-additional
# Server CLI has embedded JS; gets custom files in sub-project root, also included in JAR
make_for $ROOT_DIR/brooklyn-server/server-cli/ . binary-additional
# UI gets files at root
make_for $ROOT_DIR/brooklyn-ui/ . binary-additional
# for UI also do for each standalone module
for x in $(ls $ROOT_DIR/brooklyn-ui/ui-modules/*/package.json) ; do
make_for ${x%package.json} . binary-additional
# and in modules which make a WAR/JAR files we embed binaries
if [ -d ${x%package.json}/src/main/webapp ] ; then make_for ${x%package.json} src/main/webapp/WEB-INF/classes/META-INF/ binary-primary ; fi
done
# main projects have their binaries included at root
make_for $ROOT_DIR/brooklyn-server/ . binary-additional
make_for $ROOT_DIR/brooklyn-client/ . binary-additional
make_for $ROOT_DIR/brooklyn-library/ . binary-additional
# dist is trickier, just don't mention binaries in the generated items
make_for $ROOT_DIR/brooklyn-dist/ . binary-omitted
# brooklyn-docs skipped
# the docs don't make a build and don't include embedded code so no special license there
# and the binary dists; dist/ project which has biggest deps set, but search in all brooklyn projects
make_for $ROOT_DIR/brooklyn-dist/dist src/main/license/files/ binary-primary $ROOT_DIR
cp $OUT/{NOTICE,LICENSE} $PROJ/../karaf/apache-brooklyn/src/main/resources/
# finally in root project list everything
make_for $ROOT_DIR/brooklyn-dist/dist ../.. binary-additional $ROOT_DIR
fi