Commit 17f4d7aa by Laurynas Biveinis Committed by Christopher Faylor

winnt: Remove obsolete directory.

* config/winnt: Remove obsolete directory.
* install.texi (Configurations): Remove obsolete documentation for Windows NT.

From-SVN: r38147
parent 1ccfe3fa
2000-12-08 Laurynas Biveinis <lauras@softhome.net>
* config/winnt: Remove obsolete directory.
* install.texi (Configurations): Remove obsolete documentation for
Windows NT.
2000-12-08 Joseph S. Myers <jsm28@cam.ac.uk>
* configure.in: Don't define INSTALL_INFO.
......
echo Configuring GCC for Windows NT on %2
rem This batch file assumes a unix-type "sed" program
if %2.==alpha. echo #include "alpha/xm-alpha.h" >config.h
if %2.==alpha. echo #include "winnt/xm-winnt.h" >>config.h
if %2.==alpha. echo #include "alpha/xm-winnt.h" >>config.h
if not %2.==alpha. echo #include "%2/xm-winnt.h" >config.h
copy config.h hconfig.h
copy config.h tconfig.h
if %2.==alpha. echo #define TARGET_CPU_DEFAULT 64 >tm.h
if %2.==alpha. echo #include "alpha/alpha.h" >>tm.h
if %2.==alpha. echo #include "alpha/win-nt.h" >>tm.h
if not %2.==alpha. echo #include "%2/win-nt.h" >tm.h
rem This batch file assumes a unix-type "sed" program
echo # Makefile generated by "config-nt.bat"> Makefile
echo all.nt: cpp.exe cc1.exe cc1obj.exe xgcc.exe ld.exe stmp-headers libgcc.lib stmp-float_h specs stamp-objlist>> Makefile
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed Makefile.in >> Makefile
set LANG=
echo # >specs.h
echo # >options.h
if not exist cp\make-lang.in goto no_cp
if exist cp\lang-specs.h echo #include "cp/lang-specs.h">>specs.h
if exist cp\lang-options.h echo #include "cp/lang-options.h">>options.h
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed cp\make-lang.in >> Makefile
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed cp\makefile.in > cp\Makefile
set LANG=%LANG% c++.#
:no_cp
if not exist ada\make-lang.in goto no_ada
if exist ada\lang-specs.h echo #include "ada/lang-specs.h">>specs.h
if exist ada\lang-options.h echo #include "ada/lang-options.h">>options.h
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed ada\make-lang.in >> Makefile
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed ada\makefile.in > ada\Makefile
set LANG=%LANG% ada.#
:no_ada
if not exist f\make-lang.in goto no_f
if exist f\lang-specs.h echo #include "f/lang-specs.h">>specs.h
if exist f\lang-options.h echo #include "f/lang-options.h">>options.h
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed f\make-lang.in >> Makefile
sed -f config/%2/config-nt.sed -f config/winnt/config-nt.sed f\makefile.in > f\Makefile
set LANG=%LANG% f.#
:no_f
echo lang.mostlyclean: %LANG% | sed "s/#/mostlyclean/g" >> Makefile
echo lang.clean: %LANG% | sed "s/#/clean/g" >> Makefile
echo lang.distclean: %LANG% | sed "s/#/distclean/g" >> Makefile
echo lang.realclean: %LANG% | sed "s/#/realclean/g" >> Makefile
echo #define MULTILIB_SELECT ". ;" > multilib.h1
copy multilib.h1 multilib.h
del multilib.h1
/^Makefile/,/^ rm -f config.run/d
s/rm -f/del/
s/|| cp/|| copy/
/^config.status/,/ fi/d
s/config.status//g
s/\/dev\/null/NUL/g
s/$(srcdir)\/c-parse/c-parse/g
s/$(srcdir)\/objc-parse.y/objc-parse.y/g
s/$(srcdir)\/c-gperf/c-gperf/g
/^multilib.h/ s/multilib/not-multilib/
/^xmake_file=/ d
/^tmake_file=/ d
/^lang_specs_files=/ d
/^lang_options_files=/ d
/^version=/ c\
version=2.8.1
s/CC = cc/CC = cl/
s/^SHELL =.*/SHELL =/
s/CFLAGS = -g/CFLAGS =/
s/:\$/: \$/g
s/<\ *\$(srcdir)\//< $(srcdir)\\/g
s/^ \$(SHELL) \$(srcdir)\/move-if-change/ copy/
s/^ \$(srcdir)\/move-if-change/ copy/
s/^USE_/# USE_/
s/`echo \$(srcdir)\///g
s/ | sed 's,\^\\\.\/,,'`//g
s/^ cd \$(srcdir)[ ]*;/ /
/^stamp-attrtab/,/copy/ {
/\\$/d
/ fi/d
/copy/ i\
\ genattrtab $(md_file) > tmp-attrtab.c
}
/^enquire[ ]*:/ s/\$(GCC_PARTS)//g
/^enquire.o[ ]*:/ s/\$(GCC_PASSES)//g
/^GCC_FOR_TARGET =/ c\
GCC_FOR_TARGET = xgcc
/^ENQUIRE_LDFLAGS =/ c\
ENQUIRE_LDFLAGS =
s/; *@true//
/> *stamp-objlist/ c\
echo.exe $(OBJS) | sed -e "s, \([a-z]\), ../\1,g" >stamp-objlist
/^OBJS.*stamp-objlist/ s?`cat ../stamp-objlist`?@../stamp-objlist?
s/^\(SUBDIR_OBSTACK *=\).*$/\1 ..\/obstack.o/
s/^\(SUBDIR_USE_ALLOCA *=\).*$/\1/
s/^\(SUBDIR_MALLOC *=\).*$/\1/
/####target/ i\
STMP_FIXPROTO = \
OTHER_FIXINCLUDES_DIRS=. \
RANLIB = : \
RANLIB_TEST = false \
OLDCC = cl \
MAKE = nmake \
SYMLINK = copy \
INSTALL = $(srcdir)/install.sh -c \
exeext = .exe \
objext = .obj \
oldobjext = .obj \
\
EXTRA_PROGRAMS=ld.exe \
\
ld.obj: $(srcdir)/config/winnt/ld.c \
\ $(CC) $(CFLAGS) \\\
\ -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/ld.c \
\
ld.exe: ld.obj \
link -out:ld.exe ld.obj $(LDFLAGS) $(CLIB) \
\
EXTRA_GCC_OBJS=spawnv.obj oldnames.obj \
spawnv.obj: $(srcdir)/config/winnt/spawnv.c \
\ $(CC) $(CFLAGS) \\\
\ -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/spawnv.c \
\
oldnames.obj: $(srcdir)/config/winnt/oldnames.c \
\ $(CC) $(CFLAGS) \\\
\ -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/oldnames.c
s/^C c:/Cc:/
s/\${OBJS}/\$(OBJS)/g
s/\${SYSTEM_HEADER_DIR}/\$(SYSTEM_HEADER_DIR)/g
s/\${HOST_CC}/\$(HOST_CC)/g
s/ \${srcdir}\// /g
s/\${mainversion}/\$(mainversion)/g
s/\$(srcdir)\/move-if-change/copy/g
s/\$(SHELL) \$(srcdir)\/move-if-change/copy/g
/^# USE_HOST_OBSTACK/ i\
USE_HOST_OBSTACK=obstack.obj
/^# USE_ALLOCA/ i\
USE_ALLOCA=alloca.obj
/^# USE_HOST_ALLOCA/ i\
USE_HOST_ALLOCA=alloca.obj
s/^ALLOCA =/ALLOCA = alloca.obj/
s/^ALLOCA_FINISH = true/ALLOCA_FINISH =/
s/ \.\// /
s/^gen\([a-z]*\) *:/gen\1.exe :/
s/ gen\([a-z]*\)$/ gen\1.exe/
s/ gen\([a-z]*\) / gen\1.exe /g
s/genmultilib.exe/genmultilib/g
s/^cccp *:/cccp.exe :/
s/cccp$/cccp.exe/
s/cccp /cccp.exe /
s/CCCP=cccp.exe/CCCP=cccp/
s/(CCCP)$/(CCCP)$(exeext)/
s/^cpp *:/cpp.exe :/
s/cpp$/cpp.exe/
s/cpp /cpp.exe /
s/^cc1 *:/cc1.exe :/
s/cc1$/cc1.exe/
s/cc1 /cc1.exe /
s/^cc1obj *:/cc1obj.exe :/
s/cc1obj$/cc1obj.exe/
s/cc1obj /cc1obj.exe /
s/^xgcc *:/xgcc.exe :/
s/xgcc$/xgcc.exe/
s/xgcc /xgcc.exe /
s/^enquire *:/enquire.exe :/
s/enquire$/enquire.exe/
s/enquire /enquire.exe /
s/\.o *:/.obj :/
s/\.o$/.obj/
s/\.o /.obj /g
s/-rm -f cpp.exe/del cpp.exe/
s/\$(CC) \$(ALL_CFLAGS) \$(LDFLAGS) -o /link $(LDFLAGS) -out:/
s/\$(HOST_CC) \$(HOST_CFLAGS) \$(HOST_LDFLAGS) -o /link $(HOST_LDFLAGS) -out:/
/^# Build libgcc.a/ r config/winnt/libgcc.mak
/^# Build libgcc.a/,/ / d
/^# Build the include directory\./ r config/winnt/headers.mak
/^# Build the include directory\./,/touch objc-headers/ d
s/^\ //
/*
* @(#)msd_dir.c 1.4 87/11/06 Public Domain.
*
* A public domain implementation of BSD directory routines for
* MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield),
* August 1897
*
* Modified by Ian Stewartson, Data Logic (istewart@datlog.co.uk).
*
* Updates: 1. To support OS/2 1.x
* 2. To support HPFS long filenames
* 3. To support OS/2 2.x
* 4. To support TurboC
* 5. To support Windows NT
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <limits.h>
#include <safe-ctype.h>
#include <errno.h>
#include <dirent.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define FILE_NAME_E cFileName
#define OS_CloseFH(a) FindClose (a)
#define FIND_BUFFER WIN32_FIND_DATA
#define DISABLE_HARD_ERRORS SetErrorMode (0)
#define ENABLE_HARD_ERRORS SetErrorMode (SEM_FAILCRITICALERRORS | \
SEM_NOOPENFILEERRORBOX);
# define ERROR_EMPTY_DIR ERROR_FILE_NOT_FOUND
# define ATTRIBUTES (_A_SUBDIR | _A_HIDDEN | _A_SYSTEM | \
_A_NORMAL | _A_RDONLY | _A_ARCH)
/*
* missing ??
*/
#ifndef ENOTDIR
# define ENOTDIR 120 /* Not a directory */
#endif
#ifndef S_IFMT
# define S_IFMT 0xf000 /* type of file */
#endif
#ifndef S_ISDIR
# define S_ISDIR(m) ((((m) & S_IFMT) == S_IFDIR))
#endif
/*
* Internals
*/
typedef struct _dircontents DIRCONT;
static void free_dircontents (DIRCONT *);
/*
* Open the directory stream
*/
DIR *
opendir (name)
const char *name;
{
struct stat statb;
DIR *dirp;
char *last;
DIRCONT *dp;
char *nbuf;
int len = strlen (name);
unsigned long rc;
FIND_BUFFER dtabuf;
HANDLE d_handle;
bool HPFS = FALSE;
if (!len)
{
errno = ENOTDIR;
return (DIR *)NULL;
}
if ((nbuf = malloc (len + 5)) == (char *)NULL)
return (DIR *) NULL;
strcpy (nbuf, name);
last = &nbuf[len - 1];
/* Ok, DOS is very picky about its directory names. The following are
* valid.
*
* c:/
* c:.
* c:name/name1
*
* c:name/ is not valid
*/
if (((*last == '\\') || (*last == '/')) && (len > 1) &&
(!((len == 3) && (name[1] == ':'))))
*(last--) = 0;
/* Check its a directory */
DISABLE_HARD_ERRORS;
rc = stat (nbuf, &statb);
ENABLE_HARD_ERRORS;
if (rc)
{
free (nbuf);
return (DIR *) NULL;
}
if (!S_ISDIR (statb.st_mode))
{
free (nbuf);
errno = ENOTDIR;
return (DIR *)NULL;
}
if ((dirp = (DIR *) malloc (sizeof (DIR))) == (DIR *) NULL)
{
free (nbuf);
return (DIR *) NULL;
}
/* Set up to find everything */
if ((*last != '\\') && (*last != '/'))
strcat (last, "/");
strcat (last, "*.*");
/* Find the file system type */
HPFS = IsHPFSFileSystem (nbuf);
dirp->dd_loc = 0;
dirp->dd_cp = (DIRCONT *) NULL;
dirp->dd_contents = (DIRCONT *) NULL;
DISABLE_HARD_ERRORS;
d_handle = FindFirstFile (nbuf, &dtabuf);
rc = (d_handle == INVALID_HANDLE_VALUE) ? GetLastError () : 0;
ENABLE_HARD_ERRORS;
/* Check for errors */
if (rc)
{
free (nbuf);
/* Empty directory */
#if defined (ERROR_EMPTY_DIR)
if (rc == ERROR_EMPTY_DIR)
return dirp;
#endif
free (dirp);
return (DIR *) NULL;
}
/* Process the directory */
do
{
if (((dp = (DIRCONT *) malloc (sizeof (DIRCONT))) == (DIRCONT *)NULL) ||
((dp->_d_entry = strdup (dtabuf.FILE_NAME_E)) == (char *) NULL))
{
if (dp->_d_entry != (char *)NULL)
free ((char *)dp);
free (nbuf);
free_dircontents (dirp->dd_contents);
OS_CloseFH (d_handle);
return (DIR *) NULL;
}
if (!HPFS)
strlwr (dp->_d_entry);
if (dirp->dd_contents != (DIRCONT *) NULL)
dirp->dd_cp = dirp->dd_cp->_d_next = dp;
else
dirp->dd_contents = dirp->dd_cp = dp;
dp->_d_next = (DIRCONT *) NULL;
} while (FindNextFile (d_handle, &dtabuf));
dirp->dd_cp = dirp->dd_contents;
free (nbuf);
OS_CloseFH (d_handle);
return dirp;
}
/*
* Close the directory stream
*/
int
closedir (dirp)
DIR *dirp;
{
if (dirp != (DIR *)NULL)
{
free_dircontents (dirp->dd_contents);
free ((char *)dirp);
}
return 0;
}
/*
* Read the next record from the stream
*/
struct dirent *
readdir (dirp)
DIR *dirp;
{
static struct dirent dp;
if ((dirp == (DIR *)NULL) || (dirp->dd_cp == (DIRCONT *) NULL))
return (struct dirent *) NULL;
dp.d_reclen = strlen (strcpy (dp.d_name, dirp->dd_cp->_d_entry));
dp.d_off = dirp->dd_loc * 32;
dp.d_ino = (ino_t)++dirp->dd_loc;
dirp->dd_cp = dirp->dd_cp->_d_next;
return &dp;
}
/*
* Restart the directory stream
*/
void
rewinddir (dirp)
DIR *dirp;
{
seekdir (dirp, (off_t)0);
}
/*
* Move to a know position in the stream
*/
void
seekdir (dirp, off)
DIR *dirp;
off_t off;
{
long i = off;
DIRCONT *dp;
if ((dirp == (DIR *)NULL) || (off < 0L))
return;
for (dp = dirp->dd_contents; (--i >= 0) && (dp != (DIRCONT *)NULL);
dp = dp->_d_next)
;
dirp->dd_loc = off - (i + 1);
dirp->dd_cp = dp;
}
/*
* Get the current position
*/
off_t
telldir(dirp)
DIR *dirp;
{
return (dirp == (DIR *)NULL) ? (off_t) -1 : dirp->dd_loc;
}
/*
* Release the internal structure
*/
static void
free_dircontents (dp)
DIRCONT *dp;
{
DIRCONT *odp;
while ((odp = dp) != (DIRCONT *)NULL)
{
if (dp->_d_entry != (char *)NULL)
free (dp->_d_entry);
dp = dp->_d_next;
free ((char *)odp);
}
}
/*
* Windows NT version
*/
bool
IsHPFSFileSystem (directory)
char *directory;
{
char bName[4];
DWORD flags;
DWORD maxname;
BOOL rc;
unsigned int nDrive;
char szCurDir [MAX_PATH];
if (ISALPHA (directory[0]) && (directory[1] == ':'))
nDrive = TOUPPER (directory[0]) - '@';
else
{
GetCurrentDirectory (MAX_PATH, szCurDir);
nDrive = szCurDir[0] - 'A' + 1;
}
/* Set up the drive name */
strcpy (bName, "x:\\");
bName[0] = (char) (nDrive + '@');
/* Read the volume info, if we fail - assume non-HPFS */
DISABLE_HARD_ERRORS;
rc = GetVolumeInformation (bName, (LPTSTR)NULL, 0, (LPDWORD)NULL,
&maxname, &flags, (LPTSTR)NULL, 0);
ENABLE_HARD_ERRORS;
return ((rc) && (flags & (FS_CASE_SENSITIVE | FS_CASE_IS_PRESERVED)))
? TRUE : FALSE;
}
/*
* dirent.h
*/
#ifndef _DIRENT_H
# define _DIRENT_H
# include <sys/types.h>
# include <limits.h>
#define MAXNAMLEN 255 /* maximum filename length */
#ifndef NAME_MAX
#define NAME_MAX (MAXNAMLEN - 1)
#endif
struct dirent /* data from getdents()/readdir() */
{
ino_t d_ino; /* inode number of entry */
off_t d_off; /* offset of disk directory entry */
wchar_t d_reclen; /* length of this record */
char d_name[MAXNAMLEN + 1];
};
/* The following nonportable ugliness could have been avoided by defining
* DIRENTSIZ and DIRENTBASESIZ to also have (struct dirent *) arguments.
* There shouldn't be any problem if you avoid using the DIRENTSIZ() macro.
*/
#define DIRENTBASESIZ (((struct dirent *)0)->d_name \
- (char *)&((struct dirent *)0)->d_ino)
#define DIRENTSIZ(namlen) ((DIRENTBASESIZ + sizeof(long) + (namlen)) \
/ sizeof(long) * sizeof(long))
# ifndef _BOOL_T_DEFINED
typedef unsigned char bool;
# define _BOOL_T_DEFINED
# endif
# define DIRBUF 8192 /* buffer size for fs-indep. dirs */
/* must in general be larger than the */
/* filesystem buffer size */
struct _dircontents {
char *_d_entry;
struct _dircontents *_d_next;
};
typedef struct _dirdesc {
int dd_id; /* uniquely identify each open directory */
long dd_loc; /* where we are in directory entry is this */
struct _dircontents *dd_contents; /* pointer to contents of dir */
struct _dircontents *dd_cp; /* pointer to current position */
} DIR;
#if defined (__STDC__)
# define _PROTO(p) p
#else
# define _PROTO(p) ()
# undef const
# undef volatile
#endif
/* Functions */
extern DIR * opendir _PROTO ((const char *));
extern struct dirent * readdir _PROTO ((DIR *));
extern void rewinddir _PROTO ((DIR *));
extern int closedir _PROTO ((DIR *));
extern void seekdir _PROTO ((DIR *, off_t));
extern off_t telldir _PROTO ((DIR *));
extern int chdir _PROTO ((const char *));
extern char * getcwd _PROTO ((char *, size_t));
extern int mkdir _PROTO ((const char *));
extern int rmdir _PROTO ((const char *));
extern int scandir _PROTO ((char *,
struct dirent ***,
int (*)(const void *, const void *),
int (*)(const void *, const void *)));
extern int _chdrive _PROTO ((int));
extern int _getdrive _PROTO ((void));
extern char * _getdcwd _PROTO ((int, char *, int));
extern bool IsHPFSFileSystem _PROTO ((char *));
#endif
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
static char *concat();
static char *concat3();
static char *concat4();
static int onlyonedir;
static int atleastone;
static char *fixeddirs, *origdirs;
/* Convert all /'s to \'s */
char *
slash2slash (dirname)
char *dirname;
{
int i;
for (i=0; dirname[i]; i++)
if (dirname [i] == '/')
dirname [i] = '\\';
return dirname;
}
/* Examine each directory component of a path and create the directory */
int
mkdirpath (dirpath)
char *dirpath;
{
char *ndirpath = strdup (dirpath);
char *bp, *fp;
fp = bp = ndirpath;
while (bp)
{
bp = strchr (fp, '\\');
if (bp)
{
*bp = 0;
_mkdir (ndirpath);
*bp = '\\';
fp = ++bp;
}
else
_mkdir (ndirpath);
}
}
/* Construct a relative directory path from a given path by removing the
leading slash, if it exists and changing a drive letter from X: to X-. */
char *
newname (olddirname)
char *olddirname;
{
char *newname = strdup (olddirname);
if ((strlen (newname) >= 2)
&& (ISALPHA (newname[0]) && newname[1] == ':'))
newname [1] = '-';
else if ((strlen (newname) >= 1)
&& (newname [0] == '/' || newname [0] == '\\'))
newname = &newname[1];
return newname;
}
/* Run the sed script on one header file. If no modifications were made, then
delete the newly created file. */
int
doheader (oneheader, outheader, oldsize)
char *oneheader, *outheader;
int oldsize;
{
char *newbuff, *oldbuff;
char *newheader = concat3 ("include", "\\", newname (outheader));
struct _stat newstatbuf;
int newdesc, olddesc;
int i;
system (concat4 ("sed -f fixinc-nt.sed ", oneheader, " > ", newheader));
_stat (newheader, &newstatbuf);
if (oldsize != newstatbuf.st_size)
{
atleastone = 1;
printf ("Fixing: %s\n", oneheader);
return 0;
}
oldbuff = malloc (oldsize);
newbuff = malloc (newstatbuf.st_size);
olddesc = open (oneheader, _O_RDONLY | _O_BINARY);
newdesc = open (newheader, _O_RDONLY | _O_BINARY);
read (olddesc, oldbuff, oldsize);
read (newdesc, newbuff, newstatbuf.st_size);
close (olddesc);
close (newdesc);
for (i=0; i<oldsize; i++)
{
if (oldbuff [i] != newbuff [i])
{
free (oldbuff);
free (newbuff);
atleastone = 1;
printf ("Fixing: %s\n", oneheader);
return 0;
}
}
free (oldbuff);
free (newbuff);
unlink (newheader);
return 0;
}
/* Examine the contents of a directory and call doheader () for a regular file
and recursively call dodir () for an enclosed directory. */
int
dodir (indir, outdir)
char *indir, *outdir;
{
DIR *dir;
struct dirent *dire;
struct _stat statbuf;
char *intempbuf, *outtempbuf;
dir = opendir (indir);
if (!dir) return 0;
mkdirpath (concat3 ("include", "\\", newname (outdir)));
while ((dire = readdir (dir)))
{
if (dire->d_name[0] == '.')
continue;
intempbuf = slash2slash (concat3 (indir, "\\", dire->d_name));
outtempbuf = slash2slash (concat3 (outdir, "\\", dire->d_name));
_stat (intempbuf, &statbuf);
/* If directory ... */
if (statbuf.st_mode & _S_IFDIR)
dodir (intempbuf, outtempbuf);
/* If regular file ... */
if (statbuf.st_mode & _S_IFREG)
doheader (intempbuf, outtempbuf, statbuf.st_size);
}
closedir (dir);
return 0;
}
/* Retrieve the value of the Include environment variable, copy it into a
temporary and append a semi-colon for book-keeping purposes. Then call
dodir () for each complete directory that is named therein. If there is
only one directory, then direct the output to use include\. as the
root instead of include/<directory path>, where <directory path> is a path
constructed from the path named in the Include environment variable.
I.e. if Include=C:\MSTOOLS\Include;D:\MSVC20\Include then the modified
header files will be in include\C-\MSTOOLS\Include and
include\D-\MSVC20\Include. However if Include=C:\MSTOOLS\Include then the
modified files will be in include\. */
int
main ()
{
char *fp, *bp, *foobar;
char *incvar = getenv ("Include");
int varlen = 0;
struct _stat statbuf;
if (incvar == NULL) return 0;
varlen = strlen (incvar);
foobar = (char *) malloc (varlen + 2);
strcpy (foobar, incvar);
foobar = slash2slash (foobar);
if (foobar [varlen-1] != ';') strcat (foobar, ";");
fp = bp = foobar;
if (strchr (fp, ';') == strrchr (fp, ';'))
onlyonedir = 1;
else
onlyonedir = 0;
fixeddirs = strdup(".\\include");
origdirs = strdup("");
while (bp)
{
bp = strchr (fp, ';');
if (bp)
{
*bp = 0;
_stat (fp, &statbuf);
if (statbuf.st_mode & _S_IFDIR)
{
atleastone = 0;
if (onlyonedir)
dodir (fp, ".");
else
dodir (fp, fp);
if (atleastone && !onlyonedir)
{
origdirs = concat3 (origdirs, ";", fp);
fixeddirs = concat3 (fixeddirs, ";",
concat3 (".\\include", "\\", newname(fp)));
}
}
fp = ++bp;
}
}
printf ("set C_Include_Path=%s%s\n", fixeddirs, origdirs);
return 0;
}
/* Utility function that mallocs space and concatenates two strings. */
static char *
concat (s1, s2)
char *s1, *s2;
{
int len1 = strlen (s1);
int len2 = strlen (s2);
char *result = malloc (len1 + len2 + 1);
strcpy (result, s1);
strcpy (result + len1, s2);
*(result + len1 + len2) = 0;
return result;
}
/* Utility function that concatenates three strings. */
static char *
concat3 (s1, s2, s3)
char *s1, *s2, *s3;
{
return concat (concat (s1, s2), s3);
}
/* Utility function that concatenates four strings. */
static char *
concat4 (s1, s2, s3, s4)
char *s1, *s2, *s3, *s4;
{
return concat (concat (s1, s2), concat (s3, s4));
}
# Build the include directory. The stamp files are stmp-* rather than
# stamp-* so that mostlyclean does not force the include directory to
# be rebuilt.
# Copy in the headers provided with gcc.
USER_H = $(srcdir)\ginclude\stdarg.h $(srcdir)\ginclude\stddef.h \
$(srcdir)\ginclude\varargs.h $(srcdir)\ginclude\va-alpha.h \
$(srcdir)\ginclude\va-h8300.h $(srcdir)\ginclude\va-i860.h \
$(srcdir)\ginclude\va-i960.h $(srcdir)\ginclude\va-mips.h \
$(srcdir)\ginclude\va-m88k.h $(srcdir)\ginclude\va-pa.h \
$(srcdir)\ginclude\va-pyr.h $(srcdir)\ginclude\va-sparc.h \
$(srcdir)\ginclude\va-clipper.h $(srcdir)\ginclude\va-spur.h \
$(srcdir)\ginclude\iso646.h \
$(srcdir)\ginclude\proto.h
# Build the include directory except for float.h (which depends upon
# enquire).
stmp-int-hdrs: $(USER_H)
type $(srcdir)\limitx.h >xlimits.h
type $(srcdir)\glimits.h >>xlimits.h
type $(srcdir)\limity.h >>xlimits.h
-mkdir include
for %%f in ($(USER_H)) do copy %%f include
del include\limits.h
copy xlimits.h include\limits.h
del include\syslimits.h
copy $(srcdir)\gsyslimits.h include\syslimits.h
copy include\limits.h include\syslimits.h
del include\README
copy $(srcdir)\README-fixinc include\README
touch stmp-int-hdrs
stmp-headers: stmp-int-hdrs fixinc-nt.exe
fixinc-nt
touch stmp-headers
# Build float.h.
stmp-float_h: libgcc.lib enquire.exe
-.\enquire -f > tmp-float.h
del include\float.h
copy tmp-float.h include\float.h
touch stmp-float_h
fixinc-nt.obj: $(srcdir)/config/winnt/fixinc-nt.c
cl -c -I. -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/config/winnt $(srcdir)/config/winnt/fixinc-nt.c
fixinc-nt.exe: fixinc-nt.obj dirent.obj
cl fixinc-nt.obj dirent.obj libc.lib kernel32.lib
/* Call Windows NT 3.x linker.
Copyright (C) 1994, 1995 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (drupp@cs.washington.edu).
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
static char *concat ();
static char *concat3 ();
/* These can be set by command line arguments */
char *linker_path = 0;
int verbose = 0;
int subsystem = 0;
int entry = 0;
int link_arg_max = -1;
char **link_args = (char **) 0;
int link_arg_index = -1;
char *search_dirs = ".";
static int is_regular_file (char *name);
/* Add the argument contained in STR to the list of arguments to pass to the
linker */
static void
addarg (str)
char *str;
{
int i;
if (++link_arg_index >= link_arg_max)
{
char **new_link_args
= (char **) calloc (link_arg_max + 1000, sizeof (char *));
for (i = 0; i <= link_arg_max; i++)
new_link_args [i] = link_args [i];
if (link_args)
free (link_args);
link_arg_max += 1000;
link_args = new_link_args;
}
link_args [link_arg_index] = str;
}
/* Locate the file named in FILE_NAME in the set of paths contained in
PATH_VAL */
static char *
locate_file (file_name, path_val)
char *file_name;
char *path_val;
{
char buf [1000];
int file_len = strlen (file_name);
char *end_path = path_val + strlen (path_val);
char *ptr;
/* Handle absolute pathnames */
if (file_name [0] == '/' || file_name [0] == DIR_SEPARATOR
|| ISALPHA (file_name [0]) && file_name [1] == ':')
{
strncpy (buf, file_name, sizeof buf);
buf[sizeof buf - 1] = '\0';
if (is_regular_file (buf))
return strdup (buf);
else
return 0;
}
if (! path_val)
return 0;
for (;;)
{
for (; *path_val == PATH_SEPARATOR ; path_val++)
;
if (! *path_val)
return 0;
for (ptr = buf; *path_val && *path_val != PATH_SEPARATOR; )
*ptr++ = *path_val++;
ptr--;
if (*ptr != '/' && *ptr != DIR_SEPARATOR)
*++ptr = DIR_SEPARATOR;
strcpy (++ptr, file_name);
if (is_regular_file (buf))
return strdup (buf);
}
return 0;
}
/* Given a library name in NAME, i.e. foo. Look first for libfoo.lib and then
libfoo.a in the set of directories we are allowed to search in */
static char *
expand_lib (name)
char *name;
{
char *lib, *lib_path;
lib = malloc (strlen (name) + 8);
strcpy (lib, "lib");
strcat (lib, name);
strcat (lib, ".lib");
lib_path = locate_file (lib, search_dirs);
if (!lib_path)
{
strcpy (lib, "lib");
strcat (lib, name);
strcat (lib, ".a");
lib_path = locate_file (lib, search_dirs);
if (!lib_path)
{
fprintf
(stderr,
"Couldn't locate library: lib%s.a or lib%s.lib\n", name, name);
exit (1);
}
}
return lib_path;
}
/* Check to see if the file named in NAME is a regular file, i.e. not a
directory */
static int
is_regular_file (name)
char *name;
{
int ret;
struct stat statbuf;
ret = stat(name, &statbuf);
return !ret && S_ISREG (statbuf.st_mode);
}
/* Process the number of args in P_ARGC and contained in ARGV. Look for
special flags, etc. that must be handled for the Microsoft linker */
static void
process_args (p_argc, argv)
int *p_argc;
char *argv[];
{
int i, j;
for (i = 1; i < *p_argc; i++)
{
/* -v turns on verbose option here and is passed on to gcc */
if (! strcmp (argv [i], "-v"))
verbose = 1;
else if (! strncmp (argv [i], "-g", 2))
{
addarg ("-debugtype:coff -debug:full");
}
else if (! strncmp (argv [i], "-stack", 6))
{
i++;
addarg (concat ("-stack:",argv[i]));
}
else if (! strncmp (argv [i], "-subsystem", 10))
{
subsystem = 1;
i++;
addarg (concat ("-subsystem:",argv[i]));
}
else if (! strncmp (argv [i], "-e", 2))
{
entry = 1;
i++;
addarg (concat ("-entry:",&argv[i][1]));
}
}
}
/* The main program. Spawn the Microsoft linker after fixing up the
Unix-like flags and args to be what the Microsoft linker wants */
main (argc, argv)
int argc;
char *argv[];
{
int i;
int done_an_ali = 0;
int file_name_index;
char *pathval = getenv ("PATH");
char *spawn_args [5];
char *tmppathval = malloc (strlen (pathval) + 3);
strcpy (tmppathval, ".;");
pathval = strcat (tmppathval, pathval);
linker_path = locate_file ("link32.exe", pathval);
if (!linker_path)
{
linker_path = locate_file ("link.exe", pathval);
if (!linker_path)
{
fprintf (stderr, "Couldn't locate link32 or link\n");
exit (1);
}
}
addarg (linker_path);
process_args (&argc , argv);
if (! subsystem) addarg ("-subsystem:console");
if (! entry) addarg ("-entry:mainCRTStartup");
for (i = 1; i < argc; i++)
{
int arg_len = strlen (argv [i]);
if (!strcmp (argv [i], "-o"))
{
char *buff, *ptr;
int out_len;
i++;
out_len = strlen (argv[i]) + 10;
buff = malloc (out_len);
strcpy (buff, "-out:");
strcat (buff, argv[i]);
ptr = strstr (buff, ".exe");
if (ptr == NULL || strlen (ptr) != 4)
strcat (buff, ".exe");
addarg (buff);
}
else if (arg_len > 2 && !strncmp (argv [i], "-L", 2))
{
char *nbuff, *sdbuff;
int j, new_len, search_dirs_len;
new_len = strlen (&argv[i][2]);
search_dirs_len = strlen (search_dirs);
nbuff = malloc (new_len + 1);
strcpy (nbuff, &argv[i][2]);
for (j = 0; j < new_len; j++)
if (nbuff[j] == '/') nbuff[j] = DIR_SEPARATOR;
sdbuff = malloc (search_dirs_len + new_len + 2);
strcpy (sdbuff, search_dirs);
sdbuff[search_dirs_len] = PATH_SEPARATOR;
sdbuff[search_dirs_len+1] = 0;
strcat (sdbuff, nbuff);
search_dirs = sdbuff;
}
else if (arg_len > 2 && !strncmp (argv [i], "-l", 2))
{
addarg (expand_lib (&argv[i][2]));
}
else if (!strcmp (argv [i], "-v")
|| !strcmp (argv [i], "-g")
|| !strcmp (argv [i], "-noinhibit-exec"))
{
;
}
else if (!strcmp (argv [i], "-stack")
|| !strcmp (argv [i], "-subsystem")
|| !strcmp (argv [i], "-e"))
{
i++;
}
else
{
addarg (argv [i]);
}
}
addarg (NULL);
if (verbose)
{
int i;
for (i = 0; i < link_arg_index; i++)
printf ("%s ", link_args [i]);
putchar ('\n');
}
if (spawnvp (P_WAIT, linker_path, (const char * const *)link_args) != 0)
{
fprintf (stderr, "Error executing %s\n", link_args[0]);
exit (1);
}
exit (0);
}
static char *
concat (s1, s2)
char *s1, *s2;
{
int len1 = strlen (s1);
int len2 = strlen (s2);
char *result = malloc (len1 + len2 + 1);
strcpy (result, s1);
strcpy (result + len1, s2);
*(result + len1 + len2) = 0;
return result;
}
static char *
concat3 (s1, s2, s3)
char *s1, *s2, *s3;
{
return concat (concat (s1, s2), s3);
}
# Build libgcc.a
libgcc.lib : libgcc1.c libgcc2.c mklibgcc.exe
mklibgcc -c
mklibgcc "cl -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)" libgcc1.c $(LIB1FUNCS)
mklibgcc "xgcc -B./ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)" libgcc2.c $(LIB2FUNCS)
mklibnow.bat
-del libgcc.lib
lib -verbose -out:libgcc.lib lgcctmp/*.obj
mklibgcc.obj : $(srcdir)/config/winnt/mklibgcc.c
cl -I. -I$(srcdir) -I$(srcdir)/config/winnt -c $(srcdir)/config/winnt/mklibgcc.c
dirent.obj : $(srcdir)/config/winnt/dirent.c stmp-int-hdrs
cl -I. -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/config/winnt -c $(srcdir)/config/winnt/dirent.c
mklibgcc.exe : mklibgcc.obj dirent.obj
cl mklibgcc.obj dirent.obj libc.lib kernel32.lib
#include <stdio.h>
#include <string.h>
#include <dirent.h>
char *skips[] = {
0
};
int
do_clean()
{
DIR *dir;
struct dirent *de;
remove("mklibnow.bat");
dir = opendir("lgcctmp");
if (!dir)
return 0;
while ((de=readdir(dir)))
{
char buf[30];
if (de->d_name[0] == '.')
continue;
sprintf(buf, "lgcctmp/%s", de->d_name);
unlink(buf);
}
closedir(dir);
return 0;
}
int
main(int argc, char **argv)
{
char *cc = argv[1];
char *csrc=argv[2];
int i;
FILE *batfile;
FILE *cfile;
if (argc > 1 && strcmp(argv[1], "-c")==0)
return do_clean();
_mkdir("lgcctmp", 0755);
batfile = fopen("mklibnow.bat", "a");
if (!batfile)
{
perror("mklibnow.bat");
return 1;
}
/* fprintf(batfile, "@echo off\n"); */
for (i=3; i<argc; i++)
{
char dirname[30], basename[30], fullname[30], *bp;
int s;
for (s=0; skips[s]; s++)
if (strcmp(skips[s], argv[i]) == 0)
break;
if (skips[s])
continue;
strcpy(dirname, "lgcctmp/");
strcpy(basename, "\0");
if (strncmp(argv[i], "_fix", 4)==0)
{
strcat(basename, "fx");
strcat(basename, argv[i]+4);
}
else if (strncmp(argv[i], "_float", 4)==0)
{
strcat(basename, "flt");
strcat(basename, argv[i]+6);
}
else
{
strcat(basename, argv[i]);
}
strcpy (fullname, dirname);
strcat (fullname, basename);
fprintf(batfile, "%s -c lgcctmp/%s.c\n", cc, basename);
fprintf(batfile, "copy %s.obj lgcctmp\n", basename);
bp = fullname + strlen(fullname);
strcpy(bp, ".c");
cfile = fopen(fullname, "w");
if (cfile)
{
*bp = 0;
fprintf(cfile, "#define L%s\n#include \"%s\"\n", argv[i], csrc);
fclose(cfile);
}
else
perror(fullname);
}
fclose(batfile);
return 0;
}
int
access (const char *path, int mode)
{
return _access (path, mode);
}
int
chmod (const char *filename, int pmode)
{
return _chmod (filename, pmode);
}
int
close (int handle)
{
return _close (handle);
}
char *
mktemp (char *template)
{
return (char *) _mktemp (template);
}
int
open (const char *filename, int oflag, int pmode)
{
return _open (filename, oflag, pmode);
}
int
read (int handle, void *buffer, unsigned int count)
{
return _read (handle, buffer, count);
}
int
unlink (const char *path)
{
return _unlink (path);
}
int
write (int handle, void *buffer, unsigned int count)
{
return _write (handle, buffer, count);
}
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
#define index(s,c) strchr((s),(c))
extern char *malloc ();
const char * const *
fix_argv (argv)
char **argv;
{
static char sh_chars[] = "\"";
int i, len;
char *new_argv;
char *p, *ap;
for (i=1; argv[i]; i++)
{
len = strlen (argv[i]);
new_argv = malloc (2*len+3);
ap = new_argv;
for (p = argv[i]; *p != '\0'; ++p)
{
if (index (sh_chars, *p) != 0)
*ap++ = '\\';
*ap++ = *p;
}
*ap = '\0';
argv[i] = new_argv;
}
return (const char * const *) argv;
}
int __spawnv (mode, cmdname, argv)
int mode;
const char *cmdname;
char **argv;
{
_spawnv (mode, cmdname, fix_argv (argv));
}
int __spawnvp (mode, cmdname, argv)
int mode;
const char *cmdname;
char **argv;
{
_spawnvp (mode, cmdname, fix_argv (argv));
}
int spawnve (mode, cmdname, argv, envp)
int mode;
const char *cmdname;
char **argv;
const char *const *envp;
{
_spawnve (mode, cmdname, fix_argv (argv), envp);
}
int __spawnvpe (mode, cmdname, argv, envp)
int mode;
const char *cmdname;
char **argv;
const char *const *envp;
{
_spawnvpe (mode, cmdname, fix_argv (argv), envp);
}
/* Operating system specific defines to be used when targeting GCC for
Windows NT 3.x.
Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (drupp@cs.washington.edu).
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define TARGET_MEM_FUNCTIONS
#undef STARTFILE_SPEC
#define STARTFILE_SPEC ""
#undef LINK_SPEC
#define LINK_SPEC "-stack 5000000,5000000 -noinhibit-exec %{g}"
#undef CPP_SPEC
#define CPP_SPEC ""
#undef STANDARD_EXEC_PREFIX
#define STANDARD_EXEC_PREFIX ""
#undef STANDARD_STARTFILE_PREFIX
#define STANDARD_STARTFILE_PREFIX ""
#undef TOOLDIR_BASE_PREFIX
#define TOOLDIR_BASE_PREFIX ""
#ifdef STANDARD_INCLUDE_DIR
#undef STANDARD_INCLUDE_DIR
#endif
#define STANDARD_INCLUDE_DIR ""
#undef LOCAL_INCLUDE_DIR
#define LOCAL_INCLUDE_DIR ""
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
{ 0, 0, 0, 0 } \
}
#undef STDC_VALUE
#define STDC_VALUE 0
/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */
#define HANDLE_PRAGMA_PACK_PUSH_POP 1
STMP_FIXPROTO =
OTHER_FIXINCLUDES_DIRS=${srcdir}
RANLIB = :
RANLIB_TEST = false
OLDCC = cl
MAKE = make
SHELL = sh
SYMLINK = cp
INSTALL = $(srcdir)/install.sh -c
.SUFFIXES: .obj
.c.obj:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
.adb.obj:
$(CC) -c $(ALL_ADAFLAGS) $<
.ads.obj:
$(CC) -c $(ALL_ADAFLAGS) $<
exeext = .exe
objext = .obj
CC = gcc
CLIB =
LDFLAGS =
ld.o: $(srcdir)/config/winnt/ld.c
$(CC) -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/ld.c
ld.exe: ld.o
$(CC) -o ld.exe ld.o
oldnames.o: $(srcdir)/config/winnt/oldnames.c
$(CC) -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/oldnames.c
spawnv.o: $(srcdir)/config/winnt/spawnv.c
$(CC) -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/winnt/spawnv.c
/* Configuration for GNU compiler for processor running Windows NT 3.x.
Copyright (C) 1993, 1995, 1997, 1999 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (drupp@cs.washington.edu)
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#ifndef USG
#define USG 1
#endif
#ifndef ONLY_INT_FIELD
#define ONLY_INT_FIELDS 1
#endif
#ifndef USE_PROTOTYPES
#define USE_PROTOTYPES 1
#endif
#ifndef HAVE_PUTENV
#define HAVE_PUTENV 1
#endif
#ifndef HAVE_VPRINTF
#define HAVE_VPRINTF 1
#endif
#define kill(a,b) raise(b)
#define OBJECT_SUFFIX ".obj"
#define EXECUTABLE_SUFFIX ".exe"
#define PATH_SEPARATOR ';'
#define DIR_SEPARATOR '\\'
#define DIR_SEPARATOR_2 '/'
/* Allows checks for drive names. */
#define HAVE_DOS_BASED_FILE_SYSTEM
/* Tell GCC about NT's bit bucket. */
#define HOST_BIT_BUCKET "NUL"
#define S_IRUSR 0000400
#define S_IWUSR 0000200
#define S_IXUSR 0000100
#define S_IRGRP 0000040
#define S_IWGRP 0000020
#define S_IXGRP 0000010
#define S_IROTH 0000004
#define S_IWOTH 0000002
#define S_IXOTH 0000001
#define S_IRWXU S_IRUSR | S_IWUSR | S_IXUSR
#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG)
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
......@@ -1113,35 +1113,6 @@ and Microsoft named libraries. For example, if you specify
@samp{-lfoo}, @file{ld.exe} will look first for @file{libfoo.a}
and then for @file{foo.lib}.
You may install GNU CC for Windows NT in one of two ways, depending on
whether or not you have a Unix-like shell and various Unix-like
utilities.
@enumerate
@item
If you do not have a Unix-like shell and few Unix-like utilities, you
will use a DOS style batch script called @file{configure.bat}. Invoke
it as @code{configure winnt} from an MSDOS console window or from the
program manager dialog box. @file{configure.bat} assumes you have
already installed and have in your path a Unix-like @file{sed} program
which is used to create a working @file{Makefile} from @file{Makefile.in}.
@file{Makefile} uses the Microsoft Nmake program maintenance utility and
the Visual C/C++ V8.00 compiler to build GNU CC. You need only have the
utilities @file{sed} and @file{touch} to use this installation method,
which only automatically builds the compiler itself. You must then
examine what @file{fixinc.winnt} does, edit the header files by hand and
build @file{libgcc.a} manually.
@item
The second type of installation assumes you are running a Unix-like
shell, have a complete suite of Unix-like utilities in your path, and
have a previous version of GNU CC already installed, either through
building it via the above installation method or acquiring a pre-built
binary. In this case, use the @file{configure} script in the normal
fashion.
@end enumerate
@item i860-intel-osf1
This is the Paragon.
@ifset INSTALLONLY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment