/[gentoo-x86]/eclass/java-utils-2.eclass
Gentoo

Diff of /eclass/java-utils-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.33 Revision 1.43
4# Copyright (c) 2004, Karl Trygve Kalleberg <karltk@gentoo.org> 4# Copyright (c) 2004, Karl Trygve Kalleberg <karltk@gentoo.org>
5# Copyright (c) 2004-2005, Gentoo Foundation 5# Copyright (c) 2004-2005, Gentoo Foundation
6# 6#
7# Licensed under the GNU General Public License, v2 7# Licensed under the GNU General Public License, v2
8# 8#
9# $Header: /var/cvsroot/gentoo-x86/eclass/java-utils-2.eclass,v 1.33 2006/12/07 02:27:22 flameeyes Exp $ 9# $Header: /var/cvsroot/gentoo-x86/eclass/java-utils-2.eclass,v 1.43 2007/01/15 21:03:24 betelgeuse Exp $
10 10
11 11
12# ----------------------------------------------------------------------------- 12# -----------------------------------------------------------------------------
13# @eclass-begin 13# @eclass-begin
14# @eclass-shortdesc Java Utility eclass 14# @eclass-shortdesc Java Utility eclass
174 # Create JARDEST if it doesn't exist 174 # Create JARDEST if it doesn't exist
175 dodir ${JAVA_PKG_JARDEST} 175 dodir ${JAVA_PKG_JARDEST}
176 176
177 local jar 177 local jar
178 # for each jar 178 # for each jar
179 for jar in "$@"; do 179 for jar in ${@}; do
180 local jar_basename=$(basename "${jar}") 180 local jar_basename=$(basename "${jar}")
181 181
182 java-pkg_check-versioned-jar ${jar_basename} 182 java-pkg_check-versioned-jar ${jar_basename}
183 183
184 # check if it exists 184 # check if it exists
185 if [[ -e "${jar}" ]] ; then 185 if [[ -e "${jar}" ]] ; then
186 # Don't overwrite if jar has already been installed with the same
187 # name
188 local dest="${D}${JAVA_PKG_JARDEST}/${jar_basename}"
189 if [[ -e "${dest}" ]]; then
190 ewarn "Overwriting ${dest}"
191 fi
192
186 # install it into JARDEST if it's a non-symlink 193 # install it into JARDEST if it's a non-symlink
187 if [[ ! -L "${jar}" ]] ; then 194 if [[ ! -L "${jar}" ]] ; then
188 INSDESTTREE="${JAVA_PKG_JARDEST}" \ 195 INSDESTTREE="${JAVA_PKG_JARDEST}" \
189 doins "${jar}" || die "failed to install ${jar}" 196 doins "${jar}" || die "failed to install ${jar}"
190 java-pkg_append_ JAVA_PKG_CLASSPATH "${JAVA_PKG_JARDEST}/${jar_basename}" 197 java-pkg_append_ JAVA_PKG_CLASSPATH "${JAVA_PKG_JARDEST}/${jar_basename}"
203 210
204 java-pkg_do_write_ 211 java-pkg_do_write_
205} 212}
206 213
207 214
215# ------------------------------------------------------------------------------
216# @internal-function depend-java-query
217#
218# Wrapper for the depend-java-query binary to enable passing USE in env.
219# Using env variables keeps this eclass working with java-config versions that
220# do not handle use flags.
221# ------------------------------------------------------------------------------
222
223depend-java-query() {
224 USE="${USE}" $(which depend-java-query) "${@}"
225}
208 226
209# ------------------------------------------------------------------------------ 227# ------------------------------------------------------------------------------
210# @ebuild-function java-pkg_regjar 228# @ebuild-function java-pkg_regjar
211# 229#
212# Records an already installed jar in the package.env 230# Records an already installed jar in the package.env
243 [[ ${#} -lt 1 ]] && die "at least one argument needed" 261 [[ ${#} -lt 1 ]] && die "at least one argument needed"
244 262
245 java-pkg_init_paths_ 263 java-pkg_init_paths_
246 264
247 local jar jar_dir jar_file 265 local jar jar_dir jar_file
248 for jar in "$@"; do 266 for jar in ${@}; do
249 # TODO use java-pkg_check-versioned-jar 267 # TODO use java-pkg_check-versioned-jar
250 if [[ -e "${jar}" ]]; then 268 if [[ -e "${jar}" || -e "${D}${jar}" ]]; then
269 [[ -d "${jar}" || -d "${D}${jar}" ]] \
270 && die "Called ${FUNCNAME} on a directory $*"
251 # nelchael: we should strip ${D} in this case too, here's why: 271 # nelchael: we should strip ${D} in this case too, here's why:
252 # imagine such call: 272 # imagine such call:
253 # java-pkg_regjar ${D}/opt/java/*.jar 273 # java-pkg_regjar ${D}/opt/java/*.jar
254 # such call will fall into this case (-e ${jar}) and will 274 # such call will fall into this case (-e ${jar}) and will
255 # record paths with ${D} in package.env 275 # record paths with ${D} in package.env
256 java-pkg_append_ JAVA_PKG_CLASSPATH "${jar#${D}}" 276 java-pkg_append_ JAVA_PKG_CLASSPATH "${jar#${D}}"
257 elif [[ -e "${D}${jar}" ]]; then
258 java-pkg_append_ JAVA_PKG_CLASSPATH "${jar#${D}}"
259 else 277 else
260 die "${jar} does not exist" 278 die "${jar} does not exist"
261 fi 279 fi
262 done 280 done
263 281
264 java-pkg_do_write_ 282 java-pkg_do_write_
265} 283}
266
267 284
268# ------------------------------------------------------------------------------ 285# ------------------------------------------------------------------------------
269# @ebuild-function java-pkg_newjar 286# @ebuild-function java-pkg_newjar
270# 287#
271# Installs a jar with a new name 288# Installs a jar with a new name
540# @param $1 - filename of launcher to create 557# @param $1 - filename of launcher to create
541# @param $2 - options, as follows: 558# @param $2 - options, as follows:
542# --main the.main.class.too.start 559# --main the.main.class.too.start
543# --jar /the/jar/too/launch.jar or just <name>.jar 560# --jar /the/jar/too/launch.jar or just <name>.jar
544# --java_args 'Extra arguments to pass to java' 561# --java_args 'Extra arguments to pass to java'
545# --pkg_args 'Extra arguments too pass to the package' 562# --pkg_args 'Extra arguments to pass to the package'
546# --pwd 563# --pwd Directory the launcher changes to before executing java
547# -into 564# -into Directory to install the launcher to, instead of /usr/bin
548# -pre 565# -pre Prepend contents of this file to the launcher
549# ------------------------------------------------------------------------------ 566# ------------------------------------------------------------------------------
550java-pkg_dolauncher() { 567java-pkg_dolauncher() {
551 debug-print-function ${FUNCNAME} $* 568 debug-print-function ${FUNCNAME} $*
552 569
553 java-pkg_check-phase install 570 java-pkg_check-phase install
565 local var_tmp="${T}/launcher_variables_tmp" 582 local var_tmp="${T}/launcher_variables_tmp"
566 local target_dir pre 583 local target_dir pre
567 584
568 # Process the other the rest of the arguments 585 # Process the other the rest of the arguments
569 while [[ -n "${1}" && -n "${2}" ]]; do 586 while [[ -n "${1}" && -n "${2}" ]]; do
570 local var=${1} value=${2} 587 local var="${1}" value="${2}"
571 if [[ "${var:0:2}" == "--" ]]; then 588 if [[ "${var:0:2}" == "--" ]]; then
572 local var=${var:2} 589 local var=${var:2}
573 echo "gjl_${var}=\"${value}\"" >> "${var_tmp}" 590 echo "gjl_${var}=\"${value}\"" >> "${var_tmp}"
574 local gjl_${var}="${value}" 591 local gjl_${var}="${value}"
575 elif [[ "${var}" == "-into" ]]; then 592 elif [[ "${var}" == "-into" ]]; then
594 fi 611 fi
595 fi 612 fi
596 613
597 # Write the actual script 614 # Write the actual script
598 echo "#!/bin/bash" > "${target}" 615 echo "#!/bin/bash" > "${target}"
599 [[ -n "${pre}" ]] && [[ -f "${pre}" ]] && cat "${pre}" >> "${target}" 616 if [[ -n "${pre}" ]]; then
617 if [[ -f "${pre}" ]]; then
618 cat "${pre}" >> "${target}"
619 else
620 die "-pre specified file '${pre}' does not exist"
621 fi
622 fi
600 echo "gjl_package=${JAVA_PKG_NAME}" >> "${target}" 623 echo "gjl_package=${JAVA_PKG_NAME}" >> "${target}"
601 cat "${var_tmp}" >> "${target}" 624 cat "${var_tmp}" >> "${target}"
602 rm -f "${var_tmp}" 625 rm -f "${var_tmp}"
603 echo "source /usr/share/java-config-2/launcher/launcher.bash" >> "${target}" 626 echo "source /usr/share/java-config-2/launcher/launcher.bash" >> "${target}"
604 627
714 if [[ "${1}" = "--build-only" ]]; then 737 if [[ "${1}" = "--build-only" ]]; then
715 build_only="true" 738 build_only="true"
716 shift 739 shift
717 fi 740 fi
718 741
742 if [[ "${1}" = "--with-dependencies" ]]; then
743 local deep="--with-dependencies"
744 shift
745 fi
746
719 local target_pkg="${1}" target_jar="${2}" destjar="${3}" 747 local target_pkg="${1}" target_jar="${2}" destjar="${3}"
720 748
721 [[ -z ${target_pkg} ]] && die "Must specify a package" 749 [[ -z ${target_pkg} ]] && die "Must specify a package"
722 750
723 # default destjar to the target jar 751 # default destjar to the target jar
724 [[ -z "${destjar}" ]] && destjar="${target_jar}" 752 [[ -z "${destjar}" ]] && destjar="${target_jar}"
725 753
726 local error_msg="There was a problem getting the classpath for ${target_pkg}." 754 local error_msg="There was a problem getting the classpath for ${target_pkg}."
727 local classpath 755 local classpath
728 classpath="$(java-config --classpath=${target_pkg})" 756 classpath="$(java-config ${deep} --classpath=${target_pkg})"
729 [[ $? != 0 ]] && die ${error_msg} 757 [[ $? != 0 ]] && die ${error_msg}
730 758
731 local jar 759 local jar
732 for jar in ${classpath//:/ }; do 760 for jar in ${classpath//:/ }; do
733 local jar_name=$(basename "${jar}") 761 local jar_name=$(basename "${jar}")
789# (passed to java-config --classpath) 817# (passed to java-config --classpath)
790# ------------------------------------------------------------------------------ 818# ------------------------------------------------------------------------------
791java-pkg_getjars() { 819java-pkg_getjars() {
792 debug-print-function ${FUNCNAME} $* 820 debug-print-function ${FUNCNAME} $*
793 821
794 [[ ${#} -lt 1 || ${#} -gt 2 ]] && die "${FUNCNAME} takes only one or two arguments"
795
796 if [[ "${1}" = "--build-only" ]]; then 822 if [[ "${1}" = "--build-only" ]]; then
797 local build_only="true" 823 local build_only="true"
798 shift 824 shift
799 fi 825 fi
800 826
827 if [[ "${1}" = "--with-dependencies" ]]; then
828 local deep="--with-dependencies"
829 shift
830 fi
831
832 [[ ${#} -ne 1 ]] && die "${FUNCNAME} takes only one argument besides --build-only"
833
801 local classpath pkgs="${1}" 834 local classpath pkgs="${1}"
802 jars="$(java-config --classpath=${pkgs})" 835 jars="$(java-config ${deep} --classpath=${pkgs})"
803 [[ -z "${jars}" ]] && die "java-config --classpath=${pkgs} failed" 836 [[ -z "${jars}" ]] && die "java-config --classpath=${pkgs} failed"
804 debug-print "${pkgs}:${jars}" 837 debug-print "${pkgs}:${jars}"
805 838
806 if [[ -z "${classpath}" ]]; then 839 if [[ -z "${classpath}" ]]; then
807 classpath="${jars}" 840 classpath="${jars}"
999# 1032#
1000# export DEPEND="${DEPEND} ${depstr}" 1033# export DEPEND="${DEPEND} ${depstr}"
1001# export RDEPEND="${RDEPEND} ${depstr}" 1034# export RDEPEND="${RDEPEND} ${depstr}"
1002#} 1035#}
1003 1036
1037# ------------------------------------------------------------------------------
1038# @ebuild-function java-pkg_find-normal-jars
1039#
1040# Find the files with suffix .jar file in the given directory or $WORKDIR
1041#
1042# @param $1 - The directory to search for jar files (default: ${WORKDIR})
1043# ------------------------------------------------------------------------------
1044java-pkg_find-normal-jars() {
1045 local dir=$1
1046 [[ "${dir}" ]] || dir="${WORKDIR}"
1047 local found
1048 for jar in $(find "${dir}" -name "*.jar" -type f); do
1049 echo "${jar}"
1050 found="true"
1051 done
1052 [[ "${found}" ]]
1053 return $?
1054}
1055
1056# ------------------------------------------------------------------------------
1057# @ebuild-function java-pkg_ensure-no-bundled-jars
1058#
1059# Try to locate bundled jar files in ${WORKDIR} and die if found.
1004# This should be used after S has been populated with symlinks to jars 1060# This function should be called after WORKDIR has been populated with symlink
1005# TODO document 1061# to system jar files or bundled jars removed.
1062# ------------------------------------------------------------------------------
1006java-pkg_ensure-no-bundled-jars() { 1063java-pkg_ensure-no-bundled-jars() {
1007 debug-print-function ${FUNCNAME} $* 1064 debug-print-function ${FUNCNAME} $*
1008 pushd ${WORKDIR} >/dev/null 2>/dev/null
1009 1065
1010 local bundled_jars=$(find . -name "*.jar" -type f) 1066 local bundled_jars=$(java-pkg_find-normal-jars)
1011 if [[ -n ${bundled_jars} ]]; then 1067 if [[ -n ${bundled_jars} ]]; then
1012 echo "Bundled jars found:" 1068 echo "Bundled jars found:"
1013 local jar 1069 local jar
1014 for jar in ${bundled_jars}; do 1070 for jar in ${bundled_jars}; do
1015 echo $(pwd)${jar/./} 1071 echo $(pwd)${jar/./}
1016 done 1072 done
1017 die "Bundled jars found!" 1073 die "Bundled jars found!"
1018
1019 fi 1074 fi
1020 popd >/dev/null 2>/dev/null
1021} 1075}
1022 1076
1023# ------------------------------------------------------------------------------ 1077# ------------------------------------------------------------------------------
1024# @internal-function java-pkg_ensure-vm-version-sufficient 1078# @internal-function java-pkg_ensure-vm-version-sufficient
1025# 1079#
1174# @ebuild-function java-pkg_get-target 1228# @ebuild-function java-pkg_get-target
1175# 1229#
1176# Determines what target version should be used, for passing to -target. 1230# Determines what target version should be used, for passing to -target.
1177# If you don't care about lower versions, you can set _WANT_TARGET to the 1231# If you don't care about lower versions, you can set _WANT_TARGET to the
1178# version of your JDK. 1232# version of your JDK.
1179# Remember doing this will mostly like cause things to break.
1180# Doesn't allow it to be lower then the one in depend.
1181# Doesn't allow it to be higher then the active vm.
1182# 1233#
1183# @return string - Either the lowest possible target, or JAVA_PKG_WANT_TARGET 1234# @return string - Either the lowest possible target, or JAVA_PKG_WANT_TARGET
1184# ------------------------------------------------------------------------------ 1235# ------------------------------------------------------------------------------
1185java-pkg_get-target() { 1236java-pkg_get-target() {
1186 local min=$(depend-java-query --get-lowest "${DEPEND} ${RDEPEND}")
1187 if [[ -n "${JAVA_PKG_WANT_TARGET}" ]]; then
1188 local max="$(java-config --select-vm "${GENTOO_VM}" -g PROVIDES_VERSION)"
1189 if version_is_at_least "${min}" "${JAVA_PKG_WANT_TARGET}" && version_is_at_least "${JAVA_PKG_WANT_TARGET}" "${max}"; then
1190 echo ${JAVA_PKG_WANT_TARGET}
1191 else
1192 echo ${min}
1193 fi
1194 else
1195 echo ${min}
1196 fi
1197
1198 #echo ${JAVA_PKG_WANT_TARGET:-$(depend-java-query --get-lowest "${DEPEND}")} 1237 echo ${JAVA_PKG_WANT_TARGET:-$(depend-java-query --get-lowest "${DEPEND} ${RDEPEND}")}
1199} 1238}
1200 1239
1201java-pkg_get-javac() { 1240java-pkg_get-javac() {
1202 debug-print-function ${FUNCNAME} $* 1241 debug-print-function ${FUNCNAME} $*
1203 1242
1292 die "No GCJ support found!" 1331 die "No GCJ support found!"
1293 fi 1332 fi
1294} 1333}
1295 1334
1296java-pkg_ensure-test() { 1335java-pkg_ensure-test() {
1297 if hasq test ${FEATURES} && ! hasq -test ${FEATURES} && ! use test; then 1336 if hasq test ${FEATURES} && ! hasq -test ${FEATURES} \
1337 && hasq test ${IUSE} && ! use test;
1338 then
1298 eerror "You specified FEATURES=test, but USE=test is needed" 1339 eerror "You specified FEATURES=test, but USE=test is needed"
1299 eerror "to pull in the additional dependencies for testing" 1340 eerror "to pull in the additional dependencies for testing"
1300 die "Need USE=test enabled" 1341 die "Need USE=test enabled"
1301 fi 1342 fi
1302} 1343}
1316# ------------------------------------------------------------------------------ 1357# ------------------------------------------------------------------------------
1317# @ebuild-function eant 1358# @ebuild-function eant
1318# 1359#
1319# Ant wrapper function. Will use the appropriate compiler, based on user-defined 1360# Ant wrapper function. Will use the appropriate compiler, based on user-defined
1320# compiler. 1361# compiler.
1362# variables:
1363# EANT_GENTOO_CLASSPATH - calls java-pkg_getjars for the value and adds to the
1364# gentoo.classpath property. Be sure to call
1365# java-ant_rewrite-classpath in src_unpack.
1321# 1366#
1322# ------------------------------------------------------------------------------ 1367# ------------------------------------------------------------------------------
1323eant() { 1368eant() {
1324 debug-print-function ${FUNCNAME} $* 1369 debug-print-function ${FUNCNAME} $*
1325 1370
1327# if is-java-strict && [[ ! ${DEPEND} =~ "dev-java/ant" ]]; then 1372# if is-java-strict && [[ ! ${DEPEND} =~ "dev-java/ant" ]]; then
1328# java-pkg_announce-qa-violation \ 1373# java-pkg_announce-qa-violation \
1329# "Using eant, but not depending on dev-java/ant or dev-java/ant-core" 1374# "Using eant, but not depending on dev-java/ant or dev-java/ant-core"
1330# fi 1375# fi
1331 1376
1332 local antflags 1377 local antflags="-Dnoget=true"
1333 java-pkg_init-compiler_ 1378 java-pkg_init-compiler_
1334 local compiler="${GENTOO_COMPILER}" 1379 local compiler="${GENTOO_COMPILER}"
1335 1380
1336 local compiler_env="${JAVA_PKG_COMPILER_DIR}/${compiler}" 1381 local compiler_env="${JAVA_PKG_COMPILER_DIR}/${compiler}"
1337 1382
1339 if [[ "${compiler}" != "javac" && -z "${build_compiler}" ]]; then 1384 if [[ "${compiler}" != "javac" && -z "${build_compiler}" ]]; then
1340 die "ANT_BUILD_COMPILER undefined in ${compiler_env}" 1385 die "ANT_BUILD_COMPILER undefined in ${compiler_env}"
1341 fi 1386 fi
1342 1387
1343 if [[ ${compiler} != "javac" ]]; then 1388 if [[ ${compiler} != "javac" ]]; then
1344 antflags="-Dbuild.compiler=${build_compiler}" 1389 antflags="${antflags} -Dbuild.compiler=${build_compiler}"
1345 # Figure out any extra stuff to put on the classpath for compilers aside 1390 # Figure out any extra stuff to put on the classpath for compilers aside
1346 # from javac 1391 # from javac
1347 # ANT_BUILD_COMPILER_DEPS should be something that could be passed to 1392 # ANT_BUILD_COMPILER_DEPS should be something that could be passed to
1348 # java-config -p 1393 # java-config -p
1349 local build_compiler_deps="$(source ${JAVA_PKG_COMPILER_DIR}/${compiler} 1>/dev/null 2>&1; echo ${ANT_BUILD_COMPILER_DEPS})" 1394 local build_compiler_deps="$(source ${JAVA_PKG_COMPILER_DIR}/${compiler} 1>/dev/null 2>&1; echo ${ANT_BUILD_COMPILER_DEPS})"
1359 1404
1360 if [[ -n ${JAVA_PKG_DEBUG} ]]; then 1405 if [[ -n ${JAVA_PKG_DEBUG} ]]; then
1361 antflags="${antflags} -debug" 1406 antflags="${antflags} -debug"
1362 fi 1407 fi
1363 1408
1409 local gcp="${EANT_GENTOO_CLASSPATH}"
1410
1411 if [[ "${gcp}" ]]; then
1412 local cp="$(java-pkg_getjars ${gcp})"
1413 # It seems ant does not like single quotes around ${cp}
1414 antflags="${antflags} -Dgentoo.classpath=\"${cp}\""
1415 fi
1416
1364 [[ -n ${JAVA_PKG_DEBUG} ]] && echo ant ${antflags} "${@}" 1417 [[ -n ${JAVA_PKG_DEBUG} ]] && echo ant ${antflags} "${@}"
1365 ant ${antflags} "${@}" || die "eant failed" 1418 ant ${antflags} "${@}" || die "eant failed"
1366 1419
1367} 1420}
1368 1421
1439# @return string - Name of the target to create javadocs 1492# @return string - Name of the target to create javadocs
1440# ------------------------------------------------------------------------------ 1493# ------------------------------------------------------------------------------
1441use_doc() { 1494use_doc() {
1442 use doc && echo ${@:-javadoc} 1495 use doc && echo ${@:-javadoc}
1443} 1496}
1497
1444 1498
1445# ------------------------------------------------------------------------------ 1499# ------------------------------------------------------------------------------
1446# @section-end build 1500# @section-end build
1447# ------------------------------------------------------------------------------ 1501# ------------------------------------------------------------------------------
1448 1502
1832# Switch VM if we're allowed to (controlled by JAVA_PKG_ALLOW_VM_CHANGE), and 1886# Switch VM if we're allowed to (controlled by JAVA_PKG_ALLOW_VM_CHANGE), and
1833# verify that the current VM is sufficient. 1887# verify that the current VM is sufficient.
1834# Setup the environment for the VM being used. 1888# Setup the environment for the VM being used.
1835# ------------------------------------------------------------------------------ 1889# ------------------------------------------------------------------------------
1836java-pkg_switch-vm() { 1890java-pkg_switch-vm() {
1891 debug-print-function ${FUNCNAME} $*
1892
1837 if java-pkg_needs-vm; then 1893 if java-pkg_needs-vm; then
1838 # Use the VM specified by JAVA_PKG_FORCE_VM 1894 # Use the VM specified by JAVA_PKG_FORCE_VM
1839 if [[ -n ${JAVA_PKG_FORCE_VM} ]]; then 1895 if [[ -n "${JAVA_PKG_FORCE_VM}" ]]; then
1840 # If you're forcing the VM, I hope you know what your doing... 1896 # If you're forcing the VM, I hope you know what your doing...
1897 debug-print "JAVA_PKG_FORCE_VM used: ${JAVA_PKG_FORCE_VM}"
1841 export GENTOO_VM="${JAVA_PKG_FORCE_VM}" 1898 export GENTOO_VM="${JAVA_PKG_FORCE_VM}"
1842 # if we're allowed to switch the vm... 1899 # if we're allowed to switch the vm...
1843 elif [[ "${JAVA_PKG_ALLOW_VM_CHANGE}" == "yes" ]]; then 1900 elif [[ "${JAVA_PKG_ALLOW_VM_CHANGE}" == "yes" ]]; then
1844 debug-print "depend-java-query: NV_DEPEND: ${JAVA_PKG_NV_DEPEND:-${DEPEND}} VNEED: ${JAVA_PKG_VNEED}" 1901 debug-print "depend-java-query: NV_DEPEND: ${JAVA_PKG_NV_DEPEND:-${DEPEND}} VNEED: ${JAVA_PKG_VNEED}"
1845 if [[ -n ${JAVA_PKG_VNEED} ]]; then 1902 if [[ -n ${JAVA_PKG_VNEED} ]]; then

Legend:
Removed from v.1.33  
changed lines
  Added in v.1.43

  ViewVC Help
Powered by ViewVC 1.1.20