This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Path syntax with JRE on Cygwin


David,

Not only do you not need a distinct JDK for Cygwin, there is in fact no 
such thing.

You'll need to manage POSIX / Windows discrepancies when using the JDK 
tools. That means path names must be Windows format and the CLASSPATH 
environment must be semicolon-separated. Unlike PATH, Cygwin will not 
effect the transformation automatically for you, you must yourself apply 
cygpath when it's necessary to convert form POSIX / Cygwin file names and 
PATH-like variables.

I've attached a couple of scripts I use to make it possible to invoke the 
JDK tools using POSIX names and paths. The "wrapper" script converts file 
name and path arguments (using some heuristics you may have to change) from 
POSIX to Windows format then invokes the actual JDK tool with the Windows 
formatted arguments. MkWrappers creates links (symbolic or hard, according 
ot an option) for each of the individual JDK tools. CygWrapper is the 
script that transforms the arguments and then invokes the real JDK tool.

I find these very handy for Cygwin-based Java development. Good luck!

Randall Schulz
Teknowledge Corp.
Palo Alto, CA USA


At 10:29 3/3/2001, David A. Cobb wrote:
>HI, I do what little "real" work I do these days running in the Cygwin
>[1.1.8] environment from Xemacs--i686-pc-Cygwin--21.1.13 and the JRE
>from the Xemacs.org package repository.  I seem to be having a problem
>because the JRE expects Windows-syntax in CLASSPATH
>"C:/JDK-1.3/bin/classes;etc;etc" rather than
>"\usr\local\i686-pc-Cygwin\jre-1.3\classes:etc:etc" or the like.
>
>Do I need to download and install TWO JDK's, one windows-type for use
>when I'm only in Windows and one X*nix type recompiled for Cygwin for
>use when I'm working?  Or could JDE "fake it" by doing the Cygpath
>conversions behind the curtain?  Or, maybe, I don't really know what I'm
>doing?
>
>--
>David A. Cobb
#!/bin/sh

# Create JDK 1.3 wrapper scripts


# Use symbolic links if the file system does not support hard links
#	(Hard links will exhibit a small performance advantage
#	 and they require somewhat less disk space.)
#
#	FAT file systems don't support hard links.
#	NTFS does
#	Cygwin simulates symlinks on FAT and NTFS
#	Unix file systems do.
#
# The CVS repository includes all the link targets as distinct files.
#	This does not impede use or performance, but is very redundant.
#	Running this script, with the appropriate value for useSymlinks
#	will overwrite the distinct files with links. After doing this
#	care must be exercised if a CVS commit is done.


showUsage() {
	echo "MkWrappers: Usage: MkWrappers [ -h | -s ]"
	echo "  Options:"
	echo "    -r      Remove existing wrapper script links"
	echo "    -s      Use symbolic links (default)"
	echo "    -h      Use hard links (not recommended for Cygwin on an FAT file system)"
}


removeWrappers=0
useSymlinks=1
exitCode=0

for arg; do
	case "$arg" in
	-r)
		removeWrappers=1
		;;

	-s)
		useSymlinks=1
		;;

	-h)
		useSymlinks=0
		;;

	*)
		echo "MkWrappers: Unknown option: \"$arg\"" >&2
		showUsage >&2
		exit 1
		;;

	--help)
		showUsage
		exit 0
		;;
	esac
done


if [ $removeWrappers -ne 0 ]; then
		rm	-f appletviewer
		rm	-f extcheck
		rm	-f idlj
		rm	-f jar
		rm	-f jarsigner
		rm	-f java
		rm	-f javac
		rm	-f javadoc
		rm	-f javah
		rm	-f javap
		rm	-f javaw
		rm	-f jdb
		rm	-f keytool
		rm	-f native2ascii
		rm	-f oldjava
		rm	-f oldjavac
		rm	-f oldjavaw
		rm	-f oldjdb
		rm	-f policytool
		rm	-f rmic
		rm	-f rmid
		rm	-f rmiregistry
		rm	-f serialver
		rm	-f tnameserv
		rm	-f unregbean

else
	if [ $useSymlinks -ne 0 ]; then
		ln -s -f CygWrapper appletviewer
		ln -s -f CygWrapper extcheck
		ln -s -f CygWrapper idlj
		ln -s -f CygWrapper jar
		ln -s -f CygWrapper jarsigner
		ln -s -f CygWrapper java
		ln -s -f CygWrapper javac
		ln -s -f CygWrapper javadoc
		ln -s -f CygWrapper javah
		ln -s -f CygWrapper javap
		ln -s -f CygWrapper javaw
		ln -s -f CygWrapper jdb
		ln -s -f CygWrapper keytool
		ln -s -f CygWrapper native2ascii
		ln -s -f CygWrapper oldjava
		ln -s -f CygWrapper oldjavac
		ln -s -f CygWrapper oldjavaw
		ln -s -f CygWrapper oldjdb
		ln -s -f CygWrapper policytool
		ln -s -f CygWrapper rmic
		ln -s -f CygWrapper rmid
		ln -s -f CygWrapper rmiregistry
		ln -s -f CygWrapper serialver
		ln -s -f CygWrapper tnameserv
		ln -s -f CygWrapper unregbean

	else
		ln    -f CygWrapper appletviewer
		ln    -f CygWrapper extcheck
		ln    -f CygWrapper idlj
		ln    -f CygWrapper jar
		ln    -f CygWrapper jarsigner
		ln    -f CygWrapper java
		ln    -f CygWrapper javac
		ln    -f CygWrapper javadoc
		ln    -f CygWrapper javah
		ln    -f CygWrapper javap
		ln    -f CygWrapper javaw
		ln    -f CygWrapper jdb
		ln    -f CygWrapper keytool
		ln    -f CygWrapper native2ascii
		ln    -f CygWrapper oldjava
		ln    -f CygWrapper oldjavac
		ln    -f CygWrapper oldjavaw
		ln    -f CygWrapper oldjdb
		ln    -f CygWrapper policytool
		ln    -f CygWrapper rmic
		ln    -f CygWrapper rmid
		ln    -f CygWrapper rmiregistry
		ln    -f CygWrapper serialver
		ln    -f CygWrapper tnameserv
		ln    -f CygWrapper unregbean
	fi
fi
#!/bin/bash

# Process Cygwin / POSIX arugments to transform them into Windows native form

. cygblend.bfd
. pathops.bfd


# Get the base name of the target
targetName="${0##*/}"

# Remove the directory in which the wrapper scripts reside from $PATH
pathRemove PATH "$(toCygPATH "$(cygpath -p -w "$TKS_CYG")")"
pathRemove PATH "."
pathRemove PATH ""


# Transform Cygnus file name and PATH-style
#	arguments into their native form

nativeArgs=()

for arg; do
	# JavaDoc -group arguments include a colon-separated list of package names
	if echo "$arg" |egrep -q '([a-z]+.\*)+(:[a-z]+.\*)*'; then
		nativeArgs[${#nativeArgs[@]}]="$arg"

	else
		# Options and Windows-format file names and PATH-style arguments
		case "$arg" in
		-* \
	|	[a-zA-Z]:* \
	|	*\;* \
	|	\;* \
	|	*\; \
	|	*[\<\>]*)
			nativeArgs[${#nativeArgs[@]}]="$arg"
			;;


		# Cygnus and POSIX format file and directory names
		*/* \
	|	/* \
	|	*/)
			nativeArgs[${#nativeArgs[@]}]="$(toLocName "$arg")"
			;;


		# Cygnus format PATH-style arguments
		*:* \
	|	:* \
	|	*:)
			nativeArgs[${#nativeArgs[@]}]="$(toLocPATH "$arg")"
			;;


		# Others -- unchanged
		*)
			nativeArgs[${#nativeArgs[@]}]="$arg"
			;;
		esac
	fi
done


# Invoke the wrapped Windows native tool
if [ "$targetName" = "CygWrapper" ]; then
	echo "$targetName" "${nativeArgs[@]}"
else
	exec "$targetName" "${nativeArgs[@]}"
fi

--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]