From da96e937698340fe24bdd8a3470d7e357cd6b663 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Mon, 7 Sep 2015 00:16:39 +0200 Subject: Rename to java-apicheck --- java-apicheck | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 java-apicheck (limited to 'java-apicheck') diff --git a/java-apicheck b/java-apicheck new file mode 100755 index 0000000..ad30b93 --- /dev/null +++ b/java-apicheck @@ -0,0 +1,142 @@ +#!/bin/bash +# Copyright (C) 2006 Petteri Räty +# Copyright (C) 2006 Miroslav Šulc +# Licensed under GPL v2 or later + +usage() { + prog=$(basename "${0}") + echo "Usage:" + echo " ${prog} (ebuild|jar) (ebuild|jar|pkg)" + echo "" + echo "For example:" + echo " ${prog} foobar-1.0.ebuild foobar-1.1.ebuild" + echo " ${prog} foobar-1.0.ebuild foobar.1.0.jar" + echo " ${prog} bundledjar.jar gentoopackage" + exit 1 +} + +debug() { + if [[ "${DEBUG}" ]]; then + return 0 + else + return 1 + fi +} + +if [[ $# -ne 2 ]]; then + usage +fi + +oldarg="${1}" +newarg="${2}" + +if [[ -d /usr/share/${newarg} ]]; then + pkg=true +fi + +if ! [[ -e "${oldarg}" && ( -e "${newarg}" || ${pkg} ) ]]; then + usage +fi + +TMP_DIR="$(mktemp -d /tmp/$(basename ${0})-XXXXXX || exit 1)" +old="${TMP_DIR}/old.japi.gz" +new="${TMP_DIR}/new.japi.gz" +touch $old + +end() { + rm -v ${TMP_DIR}/*.japi.gz + rmdir -v ${TMP_DIR} + exit ${1} +} + +getpkgtemp() { + echo "${portagetmp}/$(sed -e "s%.*[/]%%" <<< sed -e "s/\.ebuild$//" <<< ${1})/" +} + +getjars() { + find "${1}/image" -name '*.jar' || end 1 +} + +generate_japi() { + file=${1} + shift + debug && echo japize as ${file} packages $(java-config -r | tr : " ") "${@}" + japize as ${file} packages $(java-config -r | tr : " " | xargs ls -1 2>/dev/null) "${@}" || end 1 +} + +listpackages() { + packages="" + for file in "${@}"; do + newpackages=`jar tf ${file} | grep .class | sed -e "s%[/][^/]*\.class$%%g" | sed -e "s%/%.%g" | sort | uniq | sed -e "s/^/\+/"` + if [[ ! -z "${newpackages}" ]]; then + if [[ -z "${packages}" ]]; then + packages=${newpackages} + else + packages="${packages} ${newpackages}" + fi + fi + done + packages=`echo ${packages} | sort | uniq` + sed -e "s/\n/ /g" <<< ${packages} +} + +getdepjars() { + env=$(find ${1} -name "package.env") + grep 'GENERATION=1' ${env} > /dev/null || source ${env} + + if [[ "${GENERATION}" = "2" && "${DEPEND}" ]]; then + # parsing DEPEND for java-config -p call + # after that removing colons + java-config --classpath=$(echo ${DEPEND} \ + | sed -e 's/:/,/g' -e 's/^[^@]*@//' -re 's/(,)[^@]*@/\1/g') | \ + sed -e "s/:/ /g" + fi +} + +if [[ ${oldarg} = *ebuild ]]; then + oldebuild=${oldarg} + category=$(basename $(dirname $(dirname $(readlink -f ${oldebuild})))) + portagetmp="$(portageq envvar PORTAGE_TMPDIR || end 1)/portage/${category}/" + + ebuild "${oldebuild}" install || end 1 + + pkgtmp="$(getpkgtemp ${oldebuild})" + [[ "${DEBUG}" ]] && echo ${pkgtmp} + + oldjars="$(getjars ${pkgtmp})" +else + oldjars="${oldarg}" +fi + +tocheck="$(listpackages ${oldjars})" + +if [[ ${oldebuild} ]]; then + debug && getdepjars "${pkgtmp}/image" + generate_japi "${old}" ${oldjars} $(getdepjars "${pkgtmp}/image") ${tocheck} +elif [[ ${pkg} ]]; then + generate_japi "${old}" ${oldjars} $(getdepjars "/usr/share/${newarg}") ${tocheck} +else + generate_japi "${old}" ${oldjars} ${tocheck} +fi + +if [[ ${newarg} = *ebuild ]]; then + newebuild="${newarg}" + ebuild "${newebuild}" install || end 1 + pkgtmp="$(getpkgtemp ${newebuild})" + newjars="$(getjars ${pkgtmp})" + debug && echo $pkgtmp +elif [[ ${pkg} ]]; then + newjars=$(java-config -dp ${newarg} | tr : " ") +else + newjars="${newarg}" +fi + +if [[ ${newebuild} ]]; then + generate_japi ${new} ${newjars} $(getdepjars "${pkgtmp}/image") ${tocheck} +else + generate_japi ${new} ${newjars} ${tocheck} +fi + +japicompat ${old} ${new} + +end $? -- cgit v1.2.3-65-gdbad