You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.9 KiB
215 lines
6.9 KiB
#!/bin/sh |
|
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../java-dirtree/java-conf.in |
|
# Copyright (C) 2008 The OpenSDE Project |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# This program is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; version 2 of the License. A copy of the |
|
# GNU General Public License can be found in the file COPYING. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
|
|
# Common java configuration is needed as well. |
|
. $base/package/*/*/java-common-conf.in |
|
|
|
# Defaults |
|
auto_detect=on |
|
build_type= |
|
|
|
# Prevent executing normal make and install build steps. |
|
# Java packages have custom make and install. |
|
makeopt= |
|
makeinstopt= |
|
|
|
# Set variables used for building java sources to there default values. |
|
# builddocdir - Location where documentation can be found after building. |
|
# buildjardir - Location where build results (jarfiles) can be found. |
|
# buildtarget - target(Ant)/goal(Maven) to be used for building. |
|
# buildfile - buildfile containing the build rules. |
|
builddocdir=dist/docs |
|
buildjardir=dist |
|
buildtarget=dist |
|
buildfile= |
|
|
|
# ------------------------------------------------------------------------- |
|
# |
|
# ------------------------------------------------------------------------- |
|
maven1_build() { |
|
echo_status "Java buildstyle: Maven (version 1)" |
|
|
|
# Maven 2 needs to be installed to be able to use it. |
|
pkgprefix -t maven1 |
|
|
|
# Invoke maven to start building. However, we strictly |
|
# forbid downloading dependancies from remote repositories. |
|
# All dependancies should be build locally and added to |
|
# the local repository. |
|
$root/$(pkgprefix bindir maven1)/maven \ |
|
-Dmaven.repo.remote.enabled=false \ |
|
$mavengoals --pom $1 |
|
} |
|
|
|
# ------------------------------------------------------------------------- |
|
# |
|
# ------------------------------------------------------------------------- |
|
maven2_build() { |
|
echo_status "Java buildstyle: Maven (version 2)" |
|
|
|
# Maven 2 needs to be installed to be able to use it. |
|
pkgprefix -t maven |
|
|
|
abort "MAVEN2 building NOT yet implemented." |
|
} |
|
|
|
# ------------------------------------------------------------------------- |
|
# ant_build: Starts the apache ant build tool. |
|
# |
|
# Besides starting the apache build tool. The results of building are |
|
# gathered and moved to right place. For this two things are considered. |
|
# dist/docs for documentation. |
|
# dist/*.jar for java jar files/libraries. |
|
# |
|
# IMPORTANT VARIABLES: |
|
# builddocdir - Location where documentation will be. |
|
# buildjardir - Location where build result will be. |
|
# buildtarget - Ant target to be used for building. |
|
# ------------------------------------------------------------------------- |
|
ant_build() { |
|
echo_status "Java buildstyle: Apache Ant" |
|
|
|
# Ant needs to be installed to be able to use it. |
|
pkgprefix -t apache-ant |
|
|
|
# Invoke Ant to start building. |
|
$root/$(pkgprefix bindir apache-ant)/ant -buildfile $1 \ |
|
-lib $(pkgprefix libdir java-dirtree) \ |
|
$antopt $buildtarget |
|
|
|
# Copy all created jar files to the package libdir. |
|
echo "Trying to copy package jar files." |
|
if ls $buildjardir/*.jar 2> /dev/null ; then |
|
cp -v $buildjardir/*.jar $root/$libdir |
|
else |
|
# Strange. No jar files available? |
|
echo "Package $pkg produces no jar files in $buildjardir/." |
|
fi |
|
|
|
# Copy all documentation to the package docdir. |
|
echo "Trying to copy package documentaion." |
|
tempdir=$builddocdir |
|
if [ -d $tempdir ] ; then |
|
( cd $tempdir; tar -c * | tar -x -C $root/$docdir ) |
|
fi |
|
unset tempdir |
|
} |
|
|
|
# ------------------------------------------------------------------------- |
|
# set_build_type: Sets the java build type. |
|
# |
|
# Sets the java build type to be used for building the current package. |
|
# ------------------------------------------------------------------------- |
|
set_build_type() { |
|
local builder_func= |
|
|
|
# Build type can only be set once per package, check if it |
|
# has already been set. |
|
if [ -n "$build_type" ] ; then |
|
echo "Buildtype already set ($build_type), can't set it to '$1'" |
|
Abort "java-conf.in: Buildtype can only be set once." |
|
fi |
|
build_type="$1" |
|
|
|
case "$build_type" in |
|
ANT) builder_func="ant_build ${buildfile:-build.xml}" ;; |
|
MAVEN) todo ;; |
|
SCRIPT) todo ;; |
|
*) abort "java-conf.in: Unknown buildtype $1 specified." ;; |
|
esac |
|
|
|
# Since the built type is set, auto detection is no longer needed. |
|
auto_detect=off |
|
|
|
# Set the inmake hook to use the given builder type. |
|
hook_add inmake 5 "$builder_func" |
|
} |
|
|
|
# Before we continue lets process all command line options. |
|
while [ "$1" ] ; do |
|
case "$1" in |
|
NO_AUTO_DETECT) auto_detect=off ; |
|
echo_status "Java buildstyle: Autodetect disabled." ;; |
|
BUILD_TYPE=*) set_build_type ${1#*=} ;; |
|
BUILD_FILE=*) buildfile=${1#*=} ;; |
|
*) abort "java-conf.in: Unknown arguments" ;; |
|
esac |
|
shift |
|
done |
|
|
|
# Check if at least one of the jdk's is available right now. |
|
if [ -z $JAVA_HOME ]; then |
|
# No jdk available, continueing is pointless. |
|
abort "At least one of the JDK's need to be installed." |
|
fi |
|
|
|
# This function determines the maven version to be used on |
|
# the given input file. |
|
# param: pom/project filename |
|
# return: the pom/project file major version number. |
|
detect_maven_version() { |
|
# Todo: look inside the file to determine the version. |
|
echo "3" |
|
} |
|
|
|
# We know how to build Ant, Maven and Maven 2 style projects. |
|
# build and build.sh scripts are ignored on purpose. By controlling |
|
# the build in here we might make it easier to build packages using |
|
# exotic compilers like gcj or jikes. |
|
determine_build_type() { |
|
local buildtype= |
|
|
|
# Check if the Ant build.xml file is available. |
|
if [ -f build.xml ]; then |
|
# Package can be build using Ant. However this might be |
|
# overruled by any of the others. |
|
buildtype="ANT" |
|
fi |
|
|
|
# Check if the Maven pom.xml or project.xml file is available. |
|
for mavenfile in pom.xml project.xml; do |
|
# Check if the maven file exists |
|
if [ -f $mavenfile ]; then |
|
# A maven file is available, but what maven |
|
# version should be used? The projectfile |
|
# version can tell us. |
|
pomversion=`detect_maven_version $mavenfile` |
|
case "$pomversion" in |
|
4*) builder_func="maven2_build $mavenfile" ;; |
|
# In all other cases we use maven 1. |
|
*) builder_func="maven1_build $mavenfile" ;; |
|
esac |
|
fi |
|
done |
|
|
|
# Check if we have found an appropriate java builder. |
|
if [ -n "$buildtype" ]; then |
|
# Set the selected build type. |
|
set_build_type $buildtype |
|
else |
|
# Auto detection of the build style resulted into |
|
# nothing. So from here on it is up to the package |
|
# to decide how to continue building the package. |
|
echo_status "Java buildstyle: Unknown buildstyle" |
|
fi |
|
} |
|
|
|
# Check if autodetection of the build process is required. |
|
if [ "$auto_detect" == "on" ] ; then |
|
# We use a postpatch hook to determine what kind of build process |
|
# is needed. When we know we set the inmake hook appropriately. |
|
hook_add postpatch 5 determine_build_type |
|
fi
|
|
|