#! /bin/bash -e shopt -s nullglob ### global variables # version of this package version="@VERSION@" working_dir="$( pwd )" program_name="$( basename "$0" )" program_dir="$( cd "$( dirname "$( type -p "$0" )" )" ; pwd )" lib_dir="/usr/share/java-package" [ "$J2SE_PACKAGE_LIBDIR" ] && lib_dir="$J2SE_PACKAGE_LIBDIR" # If a default has been set for either of the # environment variables, use it; otherwise, # default to the name and email used by the # Debian Java Maintainers project. if [ -z "$J2SE_PACKAGE_FULL_NAME" ]; then maintainer_name="Debian Java Maintainers" else maintainer_name="$J2SE_PACKAGE_FULL_NAME" fi if [ -z "$J2SE_PACKAGE_EMAIL" ]; then maintainer_email="pkg-java-maintainers@lists.alioth.debian.org" else maintainer_email="$J2SE_PACKAGE_EMAIL" fi genchanges="" build_source="" jce_archive="" ### check for run in fakeroot # are we running as fakeroot if ! dh_testroot >/dev/null 2>&1; then if [ -n "$FAKEROOTKEY" ]; then echo "Internal error, fakeroot seems to fail faking root" >&2 exit 1 fi exec fakeroot "$0" "$@" fi # check whether I'm real root, and bail out if so... ugly, but needed if touch /lib/.test 2>/dev/null; then rm -f /lib/.test echo "You are real root -- unfortunately, some Java distributions have" >&2 echo "install scripts that directly manipulate /etc, and may cause some" >&2 echo "inconsistencies on your system. Instead, you should become a" >&2 echo "non-root user and run:" >&2 echo >&2 echo "fakeroot make-jpkg $@" >&2 echo >&2 echo "which will allow no damage to be done to your system files and" >&2 echo "still permit the Java distribution to successfully extract." >&2 echo >&2 echo "Aborting." >&2 exit 1 fi ### Parse options print_usage() { cat << EOF Usage: $program_name [OPTION]... FILE $program_name builds a Debian package from the given Java binary distribution FILE Supported java binary distributions currently include: * Oracle (http://www.oracle.com/technetwork/java/javase/downloads) : - The Java Development Kit (JDK), version 6, 7 and 8 - The Java Runtime Environment (JRE), version 6, 7 and 8 - The Java API Javadoc, version 6, 7 and 8 (Choose tar.gz archives or self-extracting archives, do _not_ choose the RPM!) The following options are recognized: --full-name NAME full name used in the maintainer field of the package --email EMAIL email address used in the maintainer field of the package --distribution Define the distribution to use in the changelog --changes create a .changes file --revision add debian revision --source build a source package instead of a binary deb package --with-system-certs integrate with the system's keystore --jce-policy FILE Replace cryptography files with versions from FILE --help display this help and exit --version output version information and exit EOF } unrecognized_option() { cat >&2 << EOF $program_name: unrecognized option \`$1' Try \`$program_name --help' for more information. EOF exit 1 } missing_argument() { cat >&2 << EOF $program_name: missing argument for option \`$1' Try \`$program_name --help' for more information. EOF exit 1 } # options while [[ $# -gt 0 && "x$1" == x--* ]]; do if [[ "x$1" == x--version ]]; then echo "make-jpkg $version" exit 0 elif [[ "x$1" == x--help ]]; then print_usage exit 0 elif [[ "x$1" == x--jce-policy ]]; then [ $# -le 1 ] && missing_argument "$1" shift jce_archive="$1" elif [[ "x$1" == x--full-name ]]; then [ $# -le 1 ] && missing_argument "$1" shift maintainer_name="$1" elif [[ "x$1" == x--email ]]; then [ $# -le 1 ] && missing_argument "$1" shift maintainer_email="$1" elif [[ "x$1" == x--distribution ]]; then [ $# -le 1 ] && missing_argument "$1" shift distribution="$1" elif [[ "x$1" == x--revision ]]; then [ $# -le 1 ] && missing_argument "$1" shift revision="-${1}" elif [[ "x$1" == x--changes ]]; then genchanges="true" elif [[ "x$1" == x--source ]]; then build_source="true" elif [[ "x$1" == x--with-system-certs ]]; then create_cert_softlinks="true" else unrecognized_option "$1" fi shift done # last argument if [[ $# -ne 1 ]]; then cat >&2 << EOF $program_name: missing pathname Try \`$program_name --help' for more information. EOF exit 1 fi archive="$1" if [[ ! -e "$archive" ]]; then echo "Error: The file \"$archive\" does not exist." exit 1 elif [[ ! -r "$archive" ]]; then echo "Error: The file \"$archive\" is not readable." exit 1 fi archive_name="$( basename "$archive" )" archive_dir="$( cd "$( dirname "$archive" )" ; pwd )" archive_path="$archive_dir/$archive_name" jce_name="$( basename "$jce_archive" )" jce_dir="$( cd "$( dirname "$jce_archive" )" ; pwd )" jce_path="$jce_dir/$jce_name" # error handling success= failed= tmp= # function is called when script terminates on_exit() { lastcmd="$_" if [[ -z "$success" && -z "$failed" ]]; then cat >&2 << EOF Aborted ($lastcmd). EOF fi # remove temporary directory if [ -n "$tmp" -a -d "$tmp" ]; then echo -n "Removing temporary directory: " rm -rf "$tmp" echo "done" fi } trap on_exit EXIT # print error message and terminate error_exit() { cat >&2 << EOF Aborted. EOF failed=true exit 1 } # The environment variable tmp points to a secure temporary directory. # There should be enough free disk space. echo -n "Creating temporary directory: " tmp="$( mktemp -d -t "$program_name.XXXXXXXXXX" )" echo "$tmp" package_dir="$tmp/package" install -d -m 755 "$package_dir" debian_dir="$package_dir/debian" install -d -m 755 "$debian_dir" # load and execute plugins echo -n "Loading plugins:" files=($lib_dir/*.sh) for file in "${files[@]}"; do echo -n " $file" source "$file" done echo # get architecture information get_architecture # get browser plugin directories get_browser_plugin_dirs jvm_base="/usr/lib/jvm/" javadoc_base="/usr/share/doc/" j2se_found= for var in ${!j2se_detect_*}; do eval "\$$var" if [[ "$j2se_found" == "true" ]]; then break; fi done echo if [[ -z "$j2se_found" ]]; then echo "No matching packaging method was found for $archive_name." echo "Please make sure you are using a tar.gz or a self-extracting archive" fi ### exit success=true exit 0