diff options
author | Tom Tromey <tromey@cygnus.com> | 1999-11-10 01:38:24 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 1999-11-10 01:38:24 +0000 |
commit | 71651d6c006d42f9e838bdde548ef858cc2ca290 (patch) | |
tree | 9de7681a0f7fb805f282cfc9cf34589ddba957a3 /gcc/java/jcf-path.c | |
parent | 0deb20dfd390157a38350b7d3e4a87ba9be6bcdd (diff) | |
download | gcc-71651d6c006d42f9e838bdde548ef858cc2ca290.zip gcc-71651d6c006d42f9e838bdde548ef858cc2ca290.tar.gz gcc-71651d6c006d42f9e838bdde548ef858cc2ca290.tar.bz2 |
re GNATS gcj/84 (path to classes.zip is compiled in to gcj at build time)
* jcf-path.c: Include <sys/stat.h>.
(jcf_path_init): Search for libjava.zip. Fixes PR gcj/84.
(DIR_UP): New macro.
From-SVN: r30465
Diffstat (limited to 'gcc/java/jcf-path.c')
-rw-r--r-- | gcc/java/jcf-path.c | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/gcc/java/jcf-path.c b/gcc/java/jcf-path.c index 056be31..c0cd3a7 100644 --- a/gcc/java/jcf-path.c +++ b/gcc/java/jcf-path.c @@ -43,6 +43,10 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #define DIR_SEPARATOR '/' #endif +#ifndef DIR_UP +#define DIR_UP ".." +#endif + /* Possible flag values. */ @@ -223,9 +227,58 @@ void jcf_path_init () { char *cp; + char *try, sep[2]; + struct stat stat_b; + int found = 0, len; add_entry (&sys_dirs, ".", 0); - add_entry (&sys_dirs, LIBGCJ_ZIP_FILE, 1); + + sep[0] = DIR_SEPARATOR; + sep[1] = '\0'; + + GET_ENV_PATH_LIST (cp, "GCC_EXEC_PREFIX"); + if (cp) + { + try = alloca (strlen (cp) + 50); + /* The exec prefix can be something like + /usr/local/bin/../lib/gcc-lib/. We want to change this + into a pointer to the share directory. We support two + configurations: one where prefix and exec-prefix are the + same, and one where exec-prefix is `prefix/SOMETHING'. */ + strcpy (try, cp); + strcat (try, DIR_UP); + strcat (try, sep); + strcat (try, DIR_UP); + strcat (try, sep); + len = strlen (try); + + strcpy (try + len, "share"); + strcat (try, sep); + strcat (try, "libgcj.zip"); + if (! stat (try, &stat_b)) + { + add_entry (&sys_dirs, try, 1); + found = 1; + } + else + { + strcpy (try + len, DIR_UP); + strcat (try, sep); + strcat (try, "share"); + strcat (try, sep); + strcat (try, "libgcj.zip"); + if (! stat (try, &stat_b)) + { + add_entry (&sys_dirs, try, 1); + found = 1; + } + } + } + if (! found) + { + /* Desperation: use the installed one. */ + add_entry (&sys_dirs, LIBGCJ_ZIP_FILE, 1); + } GET_ENV_PATH_LIST (cp, "CLASSPATH"); add_path (&classpath_env, cp, 0); |