aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/jcf-path.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>1999-11-10 01:38:24 +0000
committerTom Tromey <tromey@cygnus.com>1999-11-10 01:38:24 +0000
commit1805e3d9b4f62b4a2201f50fb03e6e3fe9280794 (patch)
tree9de7681a0f7fb805f282cfc9cf34589ddba957a3 /gcc/java/jcf-path.c
parent3cf408145166cb2945ebdeb8e064a99c0f347b3d (diff)
* jcf-path.c: Include <sys/stat.h>.
(jcf_path_init): Search for libjava.zip. Fixes PR gcj/84. (DIR_UP): New macro. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@30465 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java/jcf-path.c')
-rw-r--r--gcc/java/jcf-path.c55
1 files changed, 54 insertions, 1 deletions
diff --git a/gcc/java/jcf-path.c b/gcc/java/jcf-path.c
index 056be31d12c..c0cd3a744cc 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);