home *** CD-ROM | disk | FTP | other *** search
- Wed Jun 9 16:57:11 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * gcc.c (STANDARD_BINDIR_PREFIX): Provide default.
-
- Fri Feb 5 14:22:01 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * gcc.c (make_relative_prefix): Handle the HAVE_EXECUTABLE_SUFFIX
- case.
-
- Fri Mar 13 17:54:04 1998 Michael Meissner <meissner@cygnus.com>
-
- * gcc.c (DIR_UP): If not defined, define as "..".
- (standard_bindir_prefix): New static, holds target location to
- install binaries.
- (split_directories): New function to split a filename into
- component directories.
- (free_split_directories): New function, release memory allocated
- by split_directories.
- (make_relative_prefix): New function, make a relative pathname if
- the compiler is not in the expected location.
- (process_command): Use GET_ENVIRONMENT to read GCC_EXEC_PREFIX.
- If GCC_EXEC_PREFIX was not specified, see if we can figure out an
- appropriate prefix from argv[0].
-
- * Makefile.in (gcc.o): Define STANDARD_BINDIR_PREFIX.
-
- Mon May 10 09:11:23 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (cccp.o): Use $(libsubdir)/$(unlibsubdir) for
- LOCAL_INCLUDE_DIR, so that a native compiler can find assert.h via
- GCC_EXEC_PREFIX.
-
- Fri May 7 09:16:10 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (gcc.o): Pass STANDARD_STARTFILE_PREFIX as
- $(unlibsubdir) rather than $(libdir) so that native compilations can
- find $(libdir).
-
- Index: gcc-2.95.2/gcc/Makefile.in
- ===================================================================
- RCS file: /homes/khan/src/CVSROOT/gcc-2.95.2/gcc/Makefile.in,v
- retrieving revision 1.1.1.1
- diff -u -3 -p -r1.1.1.1 Makefile.in
- --- gcc-2.95.2/gcc/Makefile.in 1999/11/05 01:09:41 1.1.1.1
- +++ gcc-2.95.2/gcc/Makefile.in 1999/11/05 05:34:35
- @@ -1407,11 +1407,12 @@ c-common.o : c-common.c $(CONFIG_H) syst
- # Language-independent files.
-
- DRIVER_DEFINES = \
- - -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
- + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
- -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
- -DDEFAULT_TARGET_VERSION=\"$(version)\" \
- -DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \
- - -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\"
- + -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \
- + -DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\"
- gcc.o: gcc.c $(CONFIG_H) system.h intl.h multilib.h \
- Makefile $(lang_specs_files) prefix.h
- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
- @@ -1971,7 +1972,7 @@ cccp.o: cccp.c $(CONFIG_H) intl.h pcp.h
- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
- -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
- -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
- - -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
- + -DLOCAL_INCLUDE_DIR=\"$(libsubdir)/$(unlibsubdir)/..`echo $(exec_prefix) | sed -e 's|^$(prefix)||' -e 's|/[^/]*|/..|g'`/include\" \
- -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
- -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
- -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
- @@ -2005,7 +2006,7 @@ cppinit.o: cppinit.c $(CONFIG_H) cpplib
- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
- -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
- -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
- - -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
- + -DLOCAL_INCLUDE_DIR=\"$(libsubdir)/$(unlibsubdir)/..`echo $(exec_prefix) | sed -e 's|^$(prefix)||' -e 's|/[^/]*|/..|g'`/include\" \
- -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
- -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
- -c `echo $(srcdir)/cppinit.c | sed 's,^\./,,'`
- @@ -2030,7 +2031,7 @@ protoize.o: protoize.c $(srcdir)/../incl
- -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
- -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
- -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
- - -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
- + -DLOCAL_INCLUDE_DIR=\"$(libsubdir)/$(unlibsubdir)/..`echo $(exec_prefix) | sed -e 's|^$(prefix)||' -e 's|/[^/]*|/..|g'`/include\" \
- -DSTD_PROTO_DIR=\"$(libsubdir)\" \
- $(srcdir)/protoize.c
-
- @@ -2041,7 +2042,7 @@ unprotoize.o: unprotoize.c protoize.c $(
- -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
- -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
- -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
- - -DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
- + -DLOCAL_INCLUDE_DIR=\"$(libsubdir)/$(unlibsubdir)/..`echo $(exec_prefix) | sed -e 's|^$(prefix)||' -e 's|/[^/]*|/..|g'`/include\" \
- -DSTD_PROTO_DIR=\"$(libsubdir)\" \
- $(srcdir)/unprotoize.c
-
- Index: gcc-2.95.2/gcc/gcc.c
- ===================================================================
- RCS file: /homes/khan/src/CVSROOT/gcc-2.95.2/gcc/gcc.c,v
- retrieving revision 1.1.1.1
- diff -u -3 -p -r1.1.1.1 gcc.c
- --- gcc-2.95.2/gcc/gcc.c 1999/11/05 01:09:43 1.1.1.1
- +++ gcc-2.95.2/gcc/gcc.c 1999/11/05 05:34:35
- @@ -76,6 +76,12 @@ compilation is specified by a string cal
-
- static char dir_separator_str[] = {DIR_SEPARATOR, 0};
-
- +/* CYGNUS LOCAL -- meissner/relative pathnames */
- +#ifndef DIR_UP
- +#define DIR_UP ".."
- +#endif
- +/* END CYGNUS LOCAL -- meissner/relative pathnames */
- +
- #define obstack_chunk_alloc xmalloc
- #define obstack_chunk_free free
-
- @@ -177,6 +183,11 @@ static void set_spec PROTO((const char
- static struct compiler *lookup_compiler PROTO((const char *, size_t, const char *));
- static char *build_search_list PROTO((struct path_prefix *, const char *, int));
- static void putenv_from_prefixes PROTO((struct path_prefix *, const char *));
- +/* CYGNUS LOCAL -- meissner/relative pathnames */
- +static char **split_directories PROTO((char *, int *));
- +static void free_split_directories PROTO((char **));
- +static char *make_relative_prefix PROTO((char *, char *, char *));
- +/* END CYGNUS LOCAL -- meissner/relative pathnames */
- static char *find_a_file PROTO((struct path_prefix *, const char *, int));
- static void add_prefix PROTO((struct path_prefix *, const char *,
- const char *, int, int, int *));
- @@ -1398,6 +1409,13 @@ static const char *standard_startfile_pr
- static const char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
- static const char *tooldir_prefix;
-
- +/* CYGNUS LOCAL -- meissner/relative pathnames */
- +#ifndef STANDARD_BINDIR_PREFIX
- +#define STANDARD_BINDIR_PREFIX "/usr/local/bin"
- +#endif /* !defined STANDARD_BINDIR_PREFIX */
- +static char *standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
- +/* END CYGNUS LOCAL -- meissner/relative pathnames */
- +
- /* Subdirectory to use for locating libraries. Set by
- set_multilib_dir based on the compilation options. */
-
- @@ -1954,6 +1972,238 @@ putenv_from_prefixes (paths, env_var)
- putenv (build_search_list (paths, env_var, 1));
- }
-
- +/* CYGNUS LOCAL -- meissner/relative pathnames */
- +/* Split a filename into component directories. */
- +
- +static char **
- +split_directories (name, ptr_num_dirs)
- + char *name;
- + int *ptr_num_dirs;
- +{
- + int num_dirs = 0;
- + char **dirs;
- + char *p, *q;
- + int ch;
- +
- + /* Count the number of directories. Special case MSDOS disk names as part
- + of the initial directory. */
- + p = name;
- + if (DIR_SEPARATOR == '\\' && name[1] == ':'
- + && (name[2] == DIR_SEPARATOR || name[2] == '/'))
- + {
- + p += 3;
- + num_dirs++;
- + }
- +
- + while ((ch = *p++) != '\0')
- + {
- + if (ch == '/' || ch == DIR_SEPARATOR)
- + {
- + num_dirs++;
- + while ((ch = *p) == '/' || ch == DIR_SEPARATOR)
- + p++;
- + }
- + }
- +
- + dirs = (char **) xmalloc (sizeof (char *) * (num_dirs + 2));
- +
- + /* Now copy the directory parts. */
- + num_dirs = 0;
- + p = name;
- + if (DIR_SEPARATOR == '\\' && name[1] == ':'
- + && (name[2] == DIR_SEPARATOR || name[2] == '/'))
- + {
- + dirs[num_dirs++] = save_string (p, 3);
- + p += 3;
- + }
- +
- + q = p;
- + while ((ch = *p++) != '\0')
- + {
- + if (ch == '/' || ch == DIR_SEPARATOR)
- + {
- + while ((ch = *p) == '/' || ch == DIR_SEPARATOR)
- + p++;
- +
- + dirs[num_dirs++] = save_string (q, p - q);
- + q = p;
- + }
- + }
- +
- + if (p - 1 - q > 0)
- + dirs[num_dirs++] = save_string (q, p - 1 - q);
- +
- + dirs[num_dirs] = NULL_PTR;
- + if (ptr_num_dirs)
- + *ptr_num_dirs = num_dirs;
- +
- + return dirs;
- +}
- +
- +/* Release storage held by split directories. */
- +
- +static void
- +free_split_directories (dirs)
- + char **dirs;
- +{
- + int i = 0;
- +
- + while (dirs[i] != NULL_PTR)
- + free (dirs[i++]);
- +
- + free ((char *)dirs);
- +}
- +
- +/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
- + to PREFIX starting with the directory portion of PROGNAME and a relative
- + pathname of the difference between BIN_PREFIX and PREFIX.
- +
- + For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is
- + /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this
- + function will return /reg/green/blue/../omega.
- +
- + If no relative prefix can be found, return NULL. */
- +
- +static char *
- +make_relative_prefix (progname, bin_prefix, prefix)
- + char *progname;
- + char *bin_prefix;
- + char *prefix;
- +{
- + char **prog_dirs, **bin_dirs, **prefix_dirs;
- + int prog_num, bin_num, prefix_num, std_loc_p;
- + int i, n, common;
- +
- + prog_dirs = split_directories (progname, &prog_num);
- + bin_dirs = split_directories (bin_prefix, &bin_num);
- +
- + /* If there is no full pathname, try to find the program by checking in each
- + of the directories specified in the PATH environment variable. */
- + if (prog_num == 1)
- + {
- + char *temp;
- +
- + GET_ENV_PATH_LIST (temp, "PATH");
- + if (temp)
- + {
- + char *startp, *endp;
- + char *nstore = (char *) alloca (strlen (temp) + strlen (progname)
- + + strlen (EXECUTABLE_SUFFIX) + 1);
- +
- + startp = endp = temp;
- + while (1)
- + {
- + if (*endp == PATH_SEPARATOR || *endp == 0)
- + {
- + if (endp == startp)
- + {
- + nstore[0] = '.';
- + nstore[1] = DIR_SEPARATOR;
- + nstore[2] = '\0';
- + }
- + else
- + {
- + strncpy (nstore, startp, endp-startp);
- + if (endp[-1] != '/' && endp[-1] != DIR_SEPARATOR)
- + {
- + nstore[endp-startp] = DIR_SEPARATOR;
- + nstore[endp-startp+1] = 0;
- + }
- + else
- + nstore[endp-startp] = 0;
- + }
- + strcat (nstore, progname);
- + if (! access (nstore, X_OK)
- +#ifdef HAVE_EXECUTABLE_SUFFIX
- + || ! access (strcat (nstore, EXECUTABLE_SUFFIX), X_OK)
- +#endif
- + )
- + {
- + free_split_directories (prog_dirs);
- + progname = nstore;
- + prog_dirs = split_directories (progname, &prog_num);
- + break;
- + }
- +
- + if (*endp == 0)
- + break;
- + endp = startp = endp + 1;
- + }
- + else
- + endp++;
- + }
- + }
- + }
- +
- + /* Remove the program name from comparison of directory names. */
- + prog_num--;
- +
- + /* Determine if the compiler is installed in the standard location, and if
- + so, we don't need to specify relative directories. Also, if argv[0]
- + doesn't contain any directory specifiers, there is not much we can do. */
- + std_loc_p = 0;
- + if (prog_num == bin_num)
- + {
- + for (i = 0; i < bin_num; i++)
- + {
- + if (strcmp (prog_dirs[i], bin_dirs[i]) != 0)
- + break;
- + }
- +
- + if (prog_num <= 0 || i == bin_num)
- + {
- + std_loc_p = 1;
- + free_split_directories (prog_dirs);
- + free_split_directories (bin_dirs);
- + prog_dirs = bin_dirs = (char **)0;
- + return NULL_PTR;
- + }
- + }
- +
- + prefix_dirs = split_directories (prefix, &prefix_num);
- +
- + /* Find how many directories are in common between bin_prefix & prefix */
- + n = (prefix_num < bin_num) ? prefix_num : bin_num;
- + for (common = 0; common < n; common++)
- + {
- + if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0)
- + break;
- + }
- +
- + /* If there are no common directories, there can be no relative prefix. */
- + if (common == 0)
- + {
- + free_split_directories (prog_dirs);
- + free_split_directories (bin_dirs);
- + free_split_directories (prefix_dirs);
- + return NULL_PTR;
- + }
- +
- + /* Build up the pathnames in argv[0]. */
- + for (i = 0; i < prog_num; i++)
- + obstack_grow (&obstack, prog_dirs[i], strlen (prog_dirs[i]));
- +
- + /* Now build up the ..'s. */
- + for (i = common; i < n; i++)
- + {
- + obstack_grow (&obstack, DIR_UP, sizeof (DIR_UP)-1);
- + obstack_1grow (&obstack, DIR_SEPARATOR);
- + }
- +
- + /* Put in directories to move over to prefix. */
- + for (i = common; i < prefix_num; i++)
- + obstack_grow (&obstack, prefix_dirs[i], strlen (prefix_dirs[i]));
- +
- + free_split_directories (prog_dirs);
- + free_split_directories (bin_dirs);
- + free_split_directories (prefix_dirs);
- +
- + obstack_1grow (&obstack, '\0');
- + return obstack_finish (&obstack);
- +}
- +/* END CYGNUS LOCAL -- meissner/relative pathnames */
- +
- +
- /* Search for NAME using the prefix list PREFIXES. MODE is passed to
- access to check permissions.
- Return 0 if not found, otherwise return its name, allocated with malloc. */
- @@ -2597,8 +2847,19 @@ process_command (argc, argv)
- break;
- }
- }
- +
- + /* CYGNUS LOCAL meissner/relative pathnames */
- + /* Set up the default search paths. If there is no GCC_EXEC_PREFIX, see if we
- + can create it from the pathname specified in argv[0]. */
-
- - /* Set up the default search paths. */
- + if (!gcc_exec_prefix)
- + {
- + gcc_exec_prefix = make_relative_prefix (argv[0], standard_bindir_prefix,
- + standard_exec_prefix);
- + if (gcc_exec_prefix)
- + putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL_PTR));
- + }
- + /* END CYGNUS LOCAL -- meissner/relative pathnames */
-
- if (gcc_exec_prefix)
- {
-