mirror of
https://github.com/mirror/make.git
synced 2026-08-20 08:53:28 +08:00
Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5d49d2e5a | ||
|
|
191dc2b434 | ||
|
|
6fa74367b7 | ||
|
|
4cee1500a4 | ||
|
|
2602fb8e71 | ||
|
|
bfce132399 | ||
|
|
30cf28ef63 | ||
|
|
a7f3831457 | ||
|
|
bcd11d854b | ||
|
|
bb01a1a810 | ||
|
|
c622dd9bdf | ||
|
|
7092951361 | ||
|
|
88d39b2a22 | ||
|
|
3863dbeb03 | ||
|
|
cca242e6e3 | ||
|
|
7082394702 | ||
|
|
1f0bf7b4db | ||
|
|
b18ce15130 | ||
|
|
c41efad63b | ||
|
|
683c716de3 | ||
|
|
29253a9683 | ||
|
|
9cc98648fd | ||
|
|
d3c192e4a6 | ||
|
|
08905cdcbc | ||
|
|
4b72e38789 | ||
|
|
ce17fda12f | ||
|
|
2df6034eb6 | ||
|
|
dd0fe8f1ee | ||
|
|
37fbc32ba4 | ||
|
|
64bdaa521f | ||
|
|
37ce7efdca | ||
|
|
4b92c539d4 |
59
ChangeLog
59
ChangeLog
@@ -1,3 +1,62 @@
|
||||
Tue Aug 27 01:06:34 1996 Roland McGrath <roland@baalperazim.frob.com>
|
||||
|
||||
* Version 3.75 released.
|
||||
|
||||
* main.c (print_version): Print out bug-reporting address.
|
||||
|
||||
Mon Aug 26 19:55:47 1996 Roland McGrath <roland@baalperazim.frob.com>
|
||||
|
||||
* main.c (print_data_base): Don't declare ctime; headers do it for us
|
||||
already.
|
||||
|
||||
Sun Jul 28 15:37:09 1996 Rob Tulloh (tulloh@tivoli.com)
|
||||
|
||||
* w32/pathstuff.c: Turned convert_vpath_to_win32() into a
|
||||
real function. This was done so that VPATH could contain
|
||||
white space separated pathnames. Please note that directory
|
||||
paths (in VPATH/vpath context) containing white space are not
|
||||
supported (just as they are not under Unix). See README.WIN32
|
||||
for suggestions.
|
||||
|
||||
* w32/include/pathstuff.h: Added prototype for the new
|
||||
function convert_vpath_to_win32. Deleted macro for same.
|
||||
|
||||
* README.WIN32: Added some notes about why I chose not to try
|
||||
and support pathnames which contain white space and some
|
||||
workaround suggestions.
|
||||
|
||||
Thu Jul 25 19:53:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* GNUmakefile (mkdep-nolib): Use -MM option unconditionally.
|
||||
|
||||
* Version 3.74.7.
|
||||
|
||||
* main.c (define_makeflags): Back up P to point at null terminator
|
||||
when killing final space and dash before setting MFLAGS.
|
||||
|
||||
From Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>:
|
||||
* dir.c [__MSDOS__] [DJGPP > 1]: Include <libc/dosio.h> and defin
|
||||
`__opendir_flags' initialized to 0.
|
||||
[__MSDOS__] (dosify) [DJGPP > 1]: Return name unchanged if _USE_LFN.
|
||||
(find_directory) [__MSDOS__ && DJGPP > 1]: If _USE_LGN, set
|
||||
__opendir_flags to __OPENDIR_PRESERVE_CASE.
|
||||
|
||||
* vmsfunctions.c (vms_stat): `sys$dassgn (DevChan);' added by kkaempf.
|
||||
|
||||
* GNUmakefile (win32files): Add NMakefile.
|
||||
|
||||
* NMakefile (LDFLAGS_debug): Value fixed by tulloh.
|
||||
|
||||
Sat Jul 20 12:32:10 1996 Klaus Kämpf (kkaempf@progis.de)
|
||||
|
||||
* remake.c (f_mtime) [VMS]: Add missing `if' conditional for future
|
||||
modtime check.
|
||||
* config.h-vms, makefile.vms, readme.vms, vmsify.c: Update address.
|
||||
|
||||
Sat Jul 20 05:29:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* configure.in: Require autoconf 2.10 or later.
|
||||
|
||||
Fri Jul 19 16:57:27 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* Version 3.74.6.
|
||||
|
||||
@@ -133,12 +133,7 @@ endif
|
||||
LDFLAGS = -g
|
||||
|
||||
# Define the command to make dependencies.
|
||||
ifneq "$(findstring gcc,$(CC))" ""
|
||||
# Don't include system directories.
|
||||
mkdep-nolib = $(CC) -MM $(CPPFLAGS)
|
||||
else
|
||||
mkdep-nolib = $(mkdep)
|
||||
endif
|
||||
mkdep = $(CC) -M $(CPPFLAGS)
|
||||
|
||||
depfiles = $(patsubst %.o,%.dep,$(filter %.o,$(objs)))
|
||||
@@ -227,7 +222,7 @@ vmsfiles = config.h-vms makefile.com makefile.vms readme.vms \
|
||||
vmsdir.h vmsfunctions.c vmsify.c
|
||||
amigafiles = README.Amiga config.ami Makefile.ami SCOPTIONS SMakefile \
|
||||
amiga.c amiga.h make.lnk
|
||||
win32files = README.WIN32 build_w32.bat config.h.WIN32 subproc.bat \
|
||||
win32files = README.WIN32 build_w32.bat config.h.WIN32 subproc.bat NMakefile \
|
||||
$(addprefix w32/,pathstuff.c compat/dirent.c include/dirent.h \
|
||||
include/pathstuff.h include/sub_proc.h \
|
||||
include/w32err.h subproc/NMakefile \
|
||||
|
||||
@@ -34,7 +34,8 @@ CFLAGS_debug = $(CFLAGS_any) /Od /D _DEBUG /FR.\WinDebug/ /Fp.\WinDebug/make.pch
|
||||
CFLAGS_release = $(CFLAGS_any) /O2 /D NDEBUG /FR.\WinRel/ /Fp.\WinRel/make.pch /Fo.\WinRel/
|
||||
|
||||
LDFLAGS_debug = w32\subproc\WinDebug\subproc.lib /NOLOGO /SUBSYSTEM:console\
|
||||
/INCREMENTAL:no /PDB:WinRel/make.pdb /MACHINE:I386 /OUT:WinDebug/make.exe /DEBUG
|
||||
/INCREMENTAL:no /PDB:WinDebug/make.pdb /MACHINE:I386 \
|
||||
/OUT:WinDebug/make.exe /DEBUG
|
||||
LDFLAGS_release = w32\subproc\WinRel\subproc.lib /NOLOGO /SUBSYSTEM:console\
|
||||
/INCREMENTAL:no /MACHINE:I386 /OUT:WinRel/make.exe
|
||||
|
||||
|
||||
2
README
2
README
@@ -1,4 +1,4 @@
|
||||
This directory contains the 3.74.6 test release of GNU Make.
|
||||
This directory contains the 3.75 test release of GNU Make.
|
||||
All bugs reported for previous test releases have been fixed.
|
||||
Some bugs surely remain.
|
||||
|
||||
|
||||
163
README.W32
163
README.W32
@@ -1,49 +1,114 @@
|
||||
Port of GNU make to Windows NT and Windows 95
|
||||
Builds natively with MSVC 2.x or MSVC 4.x compilers.
|
||||
|
||||
To build with nmake on Windows NT or Windows 95:
|
||||
|
||||
1. Make sure cl.exe is in your %Path%. Example:
|
||||
|
||||
set Path=%Path%;c:/msdev/bin
|
||||
|
||||
2. Make sure %include% is set to msvc include directory. Example:
|
||||
|
||||
set include=c:/msdev/include
|
||||
|
||||
3. Make sure %lib% is set to msvc lib directory. Example:
|
||||
|
||||
set lib=c:/msdev/lib
|
||||
|
||||
4. nmake /f NMakefile
|
||||
|
||||
|
||||
There is a bat file (build_w32.bat) for folks who have fear of nmake.
|
||||
|
||||
Outputs:
|
||||
|
||||
WinDebug/make.exe
|
||||
WinRel/make.exe
|
||||
|
||||
Notes:
|
||||
|
||||
This port prefers you have a working sh.exe somewhere on your
|
||||
system. If you don't have sh.exe, port falls back to
|
||||
MSDOS mode for launching programs (via a batch file).
|
||||
The MSDOS mode style execution has not been tested too
|
||||
carefully though (I use GNU bash as sh.exe).
|
||||
|
||||
I verified all functionality with a slightly modified version
|
||||
of make-test-0.4.5 (modifications to get test suite to run
|
||||
on Windows NT). All tests pass in an environment that includes
|
||||
sh.exe.
|
||||
|
||||
I did not provide a Visual C project file with this port as
|
||||
the project file would not be considered freely distributable
|
||||
(or so I think). It is easy enough to create one though if
|
||||
you know how to use Visual C.
|
||||
|
||||
I build the program statically to avoid problems locating DLL's
|
||||
on machines that may not have MSVC runtime installed. If you
|
||||
prefer, you can change make to build with shared libraries by
|
||||
changing /MT to /MD in the NMakefile (or build_w32.bat).
|
||||
Port of GNU make to Windows NT and Windows 95
|
||||
Builds natively with MSVC 2.x or MSVC 4.x compilers.
|
||||
|
||||
To build with nmake on Windows NT or Windows 95:
|
||||
|
||||
1. Make sure cl.exe is in your %Path%. Example:
|
||||
|
||||
set Path=%Path%;c:/msdev/bin
|
||||
|
||||
2. Make sure %include% is set to msvc include directory. Example:
|
||||
|
||||
set include=c:/msdev/include
|
||||
|
||||
3. Make sure %lib% is set to msvc lib directory. Example:
|
||||
|
||||
set lib=c:/msdev/lib
|
||||
|
||||
4. nmake /f NMakefile
|
||||
|
||||
|
||||
There is a bat file (build_w32.bat) for folks who have fear of nmake.
|
||||
|
||||
Outputs:
|
||||
|
||||
WinDebug/make.exe
|
||||
WinRel/make.exe
|
||||
|
||||
|
||||
-- Notes/Caveats --
|
||||
|
||||
GNU make and sh.exe:
|
||||
|
||||
This port prefers you have a working sh.exe somewhere on your
|
||||
system. If you don't have sh.exe, port falls back to
|
||||
MSDOS mode for launching programs (via a batch file).
|
||||
The MSDOS mode style execution has not been tested too
|
||||
carefully though (I use GNU bash as sh.exe).
|
||||
|
||||
There are very few true ports of Bourne shell for NT right now.
|
||||
There is a version of GNU bash available from Cygnus gnu-win32
|
||||
porting effort. Other possibilites are to get the MKS version
|
||||
of sh.exe or to build your own with a package like
|
||||
NutCracker (DataFocus) or Portage (Consensys).
|
||||
|
||||
Tivoli uses a homegrown port of GNU bash which is not (yet)
|
||||
freely available. It may be available someday, but I am not in control
|
||||
of this decision nor do I influence it. Sorry!
|
||||
|
||||
GNU make test suite:
|
||||
|
||||
I verified all functionality with a slightly modified version
|
||||
of make-test-0.4.5 (modifications to get test suite to run
|
||||
on Windows NT). All tests pass in an environment that includes
|
||||
sh.exe. Tested on both Windows NT and Windows 95.
|
||||
|
||||
Building GNU make on Windows NT and Windows 95 with Microsoft Visual C
|
||||
|
||||
I did not provide a Visual C project file with this port as
|
||||
the project file would not be considered freely distributable
|
||||
(or so I think). It is easy enough to create one though if
|
||||
you know how to use Visual C.
|
||||
|
||||
I build the program statically to avoid problems locating DLL's
|
||||
on machines that may not have MSVC runtime installed. If you
|
||||
prefer, you can change make to build with shared libraries by
|
||||
changing /MT to /MD in the NMakefile (or build_w32.bat).
|
||||
|
||||
Program has not been built under non-Intel architectures (yet).
|
||||
|
||||
I have not tried to build with any other compilers than MSVC.
|
||||
|
||||
Pathnames and white space:
|
||||
|
||||
Unlike Unix, WIN32 systems encourage pathnames which
|
||||
contain white space (e.g. C:\Program Files\). These sorts of pathnames
|
||||
are legal under Unix too, but are never encouraged. There is
|
||||
at least one place in make (VPATH/vpath handling) where paths
|
||||
containing white space will simply not work. There may be others
|
||||
too. I chose to not try and port make in such a way so that
|
||||
these sorts of paths could be handled. I offer these suggestions
|
||||
as workarounds:
|
||||
|
||||
1. Use 8.3 notation
|
||||
2. Rename the directory so it does not contain white space.
|
||||
|
||||
If you are unhappy with this choice, this is free software
|
||||
and you are free to take a crack at making this work. The code
|
||||
in w32/pathstuff.c and vpath.c would be the places to start.
|
||||
|
||||
SAMBA/NTFS/VFAT:
|
||||
|
||||
I have not had any success building the debug version of this
|
||||
package using SAMBA as my file server. The reason seems to be
|
||||
related to the way VC++ 4.0 changes the case name of the pdb
|
||||
filename it is passed on the command line. It seems to change
|
||||
the name always to to lower case. I contend that
|
||||
the VC++ compiler should not change the casename of files that
|
||||
are passed as arguments on the command line. I don't think this
|
||||
was a problem in MSVC 2.x, but I know it is a problem in MSVC 4.x.
|
||||
|
||||
The package builds fine on VFAT and NTFS filesystems.
|
||||
|
||||
Most all of the development I have done to date has been using
|
||||
NTFS and long file names. I have not done any considerable work
|
||||
under VFAT. VFAT users may wish to be aware that this port
|
||||
of make does respect case sensitivity.
|
||||
|
||||
Bug reports:
|
||||
|
||||
Please submit bugs via the normal bug reporting mechanism
|
||||
which is described in one of the texinfo files. If you don't
|
||||
have texinfo for Windows NT or Windows 95, these files are simple
|
||||
text files and can be read with a text editor.
|
||||
|
||||
|
||||
163
README.WIN32
163
README.WIN32
@@ -1,49 +1,114 @@
|
||||
Port of GNU make to Windows NT and Windows 95
|
||||
Builds natively with MSVC 2.x or MSVC 4.x compilers.
|
||||
|
||||
To build with nmake on Windows NT or Windows 95:
|
||||
|
||||
1. Make sure cl.exe is in your %Path%. Example:
|
||||
|
||||
set Path=%Path%;c:/msdev/bin
|
||||
|
||||
2. Make sure %include% is set to msvc include directory. Example:
|
||||
|
||||
set include=c:/msdev/include
|
||||
|
||||
3. Make sure %lib% is set to msvc lib directory. Example:
|
||||
|
||||
set lib=c:/msdev/lib
|
||||
|
||||
4. nmake /f NMakefile
|
||||
|
||||
|
||||
There is a bat file (build_w32.bat) for folks who have fear of nmake.
|
||||
|
||||
Outputs:
|
||||
|
||||
WinDebug/make.exe
|
||||
WinRel/make.exe
|
||||
|
||||
Notes:
|
||||
|
||||
This port prefers you have a working sh.exe somewhere on your
|
||||
system. If you don't have sh.exe, port falls back to
|
||||
MSDOS mode for launching programs (via a batch file).
|
||||
The MSDOS mode style execution has not been tested too
|
||||
carefully though (I use GNU bash as sh.exe).
|
||||
|
||||
I verified all functionality with a slightly modified version
|
||||
of make-test-0.4.5 (modifications to get test suite to run
|
||||
on Windows NT). All tests pass in an environment that includes
|
||||
sh.exe.
|
||||
|
||||
I did not provide a Visual C project file with this port as
|
||||
the project file would not be considered freely distributable
|
||||
(or so I think). It is easy enough to create one though if
|
||||
you know how to use Visual C.
|
||||
|
||||
I build the program statically to avoid problems locating DLL's
|
||||
on machines that may not have MSVC runtime installed. If you
|
||||
prefer, you can change make to build with shared libraries by
|
||||
changing /MT to /MD in the NMakefile (or build_w32.bat).
|
||||
Port of GNU make to Windows NT and Windows 95
|
||||
Builds natively with MSVC 2.x or MSVC 4.x compilers.
|
||||
|
||||
To build with nmake on Windows NT or Windows 95:
|
||||
|
||||
1. Make sure cl.exe is in your %Path%. Example:
|
||||
|
||||
set Path=%Path%;c:/msdev/bin
|
||||
|
||||
2. Make sure %include% is set to msvc include directory. Example:
|
||||
|
||||
set include=c:/msdev/include
|
||||
|
||||
3. Make sure %lib% is set to msvc lib directory. Example:
|
||||
|
||||
set lib=c:/msdev/lib
|
||||
|
||||
4. nmake /f NMakefile
|
||||
|
||||
|
||||
There is a bat file (build_w32.bat) for folks who have fear of nmake.
|
||||
|
||||
Outputs:
|
||||
|
||||
WinDebug/make.exe
|
||||
WinRel/make.exe
|
||||
|
||||
|
||||
-- Notes/Caveats --
|
||||
|
||||
GNU make and sh.exe:
|
||||
|
||||
This port prefers you have a working sh.exe somewhere on your
|
||||
system. If you don't have sh.exe, port falls back to
|
||||
MSDOS mode for launching programs (via a batch file).
|
||||
The MSDOS mode style execution has not been tested too
|
||||
carefully though (I use GNU bash as sh.exe).
|
||||
|
||||
There are very few true ports of Bourne shell for NT right now.
|
||||
There is a version of GNU bash available from Cygnus gnu-win32
|
||||
porting effort. Other possibilites are to get the MKS version
|
||||
of sh.exe or to build your own with a package like
|
||||
NutCracker (DataFocus) or Portage (Consensys).
|
||||
|
||||
Tivoli uses a homegrown port of GNU bash which is not (yet)
|
||||
freely available. It may be available someday, but I am not in control
|
||||
of this decision nor do I influence it. Sorry!
|
||||
|
||||
GNU make test suite:
|
||||
|
||||
I verified all functionality with a slightly modified version
|
||||
of make-test-0.4.5 (modifications to get test suite to run
|
||||
on Windows NT). All tests pass in an environment that includes
|
||||
sh.exe. Tested on both Windows NT and Windows 95.
|
||||
|
||||
Building GNU make on Windows NT and Windows 95 with Microsoft Visual C
|
||||
|
||||
I did not provide a Visual C project file with this port as
|
||||
the project file would not be considered freely distributable
|
||||
(or so I think). It is easy enough to create one though if
|
||||
you know how to use Visual C.
|
||||
|
||||
I build the program statically to avoid problems locating DLL's
|
||||
on machines that may not have MSVC runtime installed. If you
|
||||
prefer, you can change make to build with shared libraries by
|
||||
changing /MT to /MD in the NMakefile (or build_w32.bat).
|
||||
|
||||
Program has not been built under non-Intel architectures (yet).
|
||||
|
||||
I have not tried to build with any other compilers than MSVC.
|
||||
|
||||
Pathnames and white space:
|
||||
|
||||
Unlike Unix, WIN32 systems encourage pathnames which
|
||||
contain white space (e.g. C:\Program Files\). These sorts of pathnames
|
||||
are legal under Unix too, but are never encouraged. There is
|
||||
at least one place in make (VPATH/vpath handling) where paths
|
||||
containing white space will simply not work. There may be others
|
||||
too. I chose to not try and port make in such a way so that
|
||||
these sorts of paths could be handled. I offer these suggestions
|
||||
as workarounds:
|
||||
|
||||
1. Use 8.3 notation
|
||||
2. Rename the directory so it does not contain white space.
|
||||
|
||||
If you are unhappy with this choice, this is free software
|
||||
and you are free to take a crack at making this work. The code
|
||||
in w32/pathstuff.c and vpath.c would be the places to start.
|
||||
|
||||
SAMBA/NTFS/VFAT:
|
||||
|
||||
I have not had any success building the debug version of this
|
||||
package using SAMBA as my file server. The reason seems to be
|
||||
related to the way VC++ 4.0 changes the case name of the pdb
|
||||
filename it is passed on the command line. It seems to change
|
||||
the name always to to lower case. I contend that
|
||||
the VC++ compiler should not change the casename of files that
|
||||
are passed as arguments on the command line. I don't think this
|
||||
was a problem in MSVC 2.x, but I know it is a problem in MSVC 4.x.
|
||||
|
||||
The package builds fine on VFAT and NTFS filesystems.
|
||||
|
||||
Most all of the development I have done to date has been using
|
||||
NTFS and long file names. I have not done any considerable work
|
||||
under VFAT. VFAT users may wish to be aware that this port
|
||||
of make does respect case sensitivity.
|
||||
|
||||
Bug reports:
|
||||
|
||||
Please submit bugs via the normal bug reporting mechanism
|
||||
which is described in one of the texinfo files. If you don't
|
||||
have texinfo for Windows NT or Windows 95, these files are simple
|
||||
text files and can be read with a text editor.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* config.h-vms. Generated by hand by Klaus Kämpf <kkaempf@didymus.rmi.de> */
|
||||
/* config.h-vms. Generated by hand by Klaus Kämpf <kkaempf@progis.de> */
|
||||
/* config.h. Generated automatically by configure. */
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
|
||||
2
configure
vendored
2
configure
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
|
||||
# From configure.in Id: configure.in,v 1.51 1996/06/22 22:00:32 roland Exp
|
||||
# From configure.in Id: configure.in,v 1.52 1996/07/20 09:30:04 roland Exp
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated automatically using autoconf version 2.10
|
||||
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_REVISION([$Id$])
|
||||
AC_PREREQ(2.1)dnl dnl Minimum Autoconf version required.
|
||||
AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
|
||||
AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
AC_CONFIG_SUBDIRS(glob) dnl Run configure in glob subdirectory.
|
||||
|
||||
16
dir.c
16
dir.c
@@ -56,6 +56,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifdef __MSDOS__
|
||||
#include <ctype.h>
|
||||
#if (DJGPP > 1)
|
||||
#include <libc/dosio.h>
|
||||
int __opendir_flags = 0;
|
||||
#endif
|
||||
|
||||
static char *
|
||||
dosify (filename)
|
||||
@@ -65,6 +69,11 @@ dosify (filename)
|
||||
char *df;
|
||||
int i;
|
||||
|
||||
#if (DJGPP > 1)
|
||||
if (_USE_LFN)
|
||||
/* Using long file names; do no transformation. */
|
||||
return filename;
|
||||
#endif
|
||||
if (filename == 0)
|
||||
return 0;
|
||||
|
||||
@@ -372,6 +381,13 @@ find_directory (name)
|
||||
dc->next = directories_contents[hash];
|
||||
directories_contents[hash] = dc;
|
||||
|
||||
#if defined (__MSDOS__) && (DJGPP > 1)
|
||||
if (_USE_LFN)
|
||||
/* We are using long filenames, so tell opendir not
|
||||
to mess with them. */
|
||||
__opendir_flags = __OPENDIR_PRESERVE_CASE;
|
||||
#endif
|
||||
|
||||
dc->dirstream = opendir (name);
|
||||
if (dc->dirstream == 0)
|
||||
{
|
||||
|
||||
163
glob/ChangeLog
163
glob/ChangeLog
@@ -1,3 +1,17 @@
|
||||
Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
Win32 hacks from <Rob_Tulloh@tivoli.com>.
|
||||
* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
|
||||
use void * for my_realloc; include <malloc.h> for alloca.
|
||||
(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
|
||||
* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
|
||||
* posix/glob.h: Likewise.
|
||||
|
||||
Fri Jul 19 16:56:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
|
||||
for `struct stat;' forward decl.
|
||||
|
||||
Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].
|
||||
@@ -7,152 +21,3 @@ Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
|
||||
only for ?s, not for *s. Fix from Chet Ramey.
|
||||
|
||||
Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c [VMS]: Don't include <pwd.h>.
|
||||
[HAVE_VMSDIR_H]: Include "vmsdir.h".
|
||||
(glob) [VMS]: Don't grok ~.
|
||||
|
||||
Mon May 13 12:03:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl.
|
||||
|
||||
* posix/glob.c [_AMIGA]: Don't include <pwd.h>.
|
||||
(glob): Remove bogus & in call to globfree.
|
||||
[_AMIGA]: Use AmigaDOS file name conventions.
|
||||
|
||||
Thu May 9 09:17:46 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/SMakefile, posix/glob/SCOPTIONS, posix/glob/Makefile.ami:
|
||||
New files, AmigaDOS support from Aaron Digulla.
|
||||
* posix/Makefile (glob.tar): Add AmigaDOS support files.
|
||||
|
||||
Tue Apr 2 21:27:01 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
|
||||
the pattern ends with a backslash and quoting is enabled.
|
||||
* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
|
||||
patterns.
|
||||
|
||||
Thu Mar 14 06:01:07 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): In GLOB_BRACE brace expansion, fix buffer size
|
||||
calculation to include trailing invariant portion. Don't use alloca;
|
||||
instead use a dynamic auto array for GCC, malloc for non-GCC.
|
||||
Handle nested braces properly.
|
||||
|
||||
Fri Mar 1 10:09:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c: Use canonical code from autoconf manual for dirent
|
||||
include.
|
||||
[_D_NAMLEN]: Redefine NAMLEN using this.
|
||||
(glob_in_dir): Use NAMLEN macro.
|
||||
|
||||
Fri Jan 19 13:28:59 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): Use prototype in getlogin decl.
|
||||
|
||||
Thu Jan 18 00:32:43 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (_GNU_SOURCE): Define if undefined, so glob.h
|
||||
defines GNU extensions.
|
||||
* posix/fnmatch.c: Likewise.
|
||||
|
||||
Fri Jan 12 13:40:01 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): Add parens in glob call flags arg for
|
||||
GLOB_BRACE case.
|
||||
|
||||
Thu Dec 14 02:28:22 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob_in_dir): Cast result of opendir to __ptr_t,
|
||||
and cast STREAM to DIR * before passing to readdir and closedir.
|
||||
|
||||
Mon Dec 11 20:07:54 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c [! STDC_HEADERS]: Declare getenv.
|
||||
(glob): Avoid using function as value.
|
||||
|
||||
Fri Dec 8 13:04:51 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c: Implement new options GLOB_ALTDIRFUNC, GLOB_BRACE,
|
||||
GLOB_TILDE, GLOB_NOMAGIC.
|
||||
(glob): Use stat instead of lstat to determine directoriness.
|
||||
* posix/glob.h (GLOB_ALTDIRFUNC, GLOB_BRACE, GLOB_NOMAGIC, GLOB_TILDE):
|
||||
New flag bits.
|
||||
(__GLOB_FLAGS): Include them.
|
||||
(glob_t): New members gl_closedir, gl_readdir, gl_opendir, gl_lstat,
|
||||
gl_stat.
|
||||
|
||||
Mon Sep 11 14:00:14 1995 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): Comment fix.
|
||||
|
||||
Wed Aug 30 16:44:55 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): Use realloc to extend strings for GLOB_MARK
|
||||
slash.
|
||||
(glob_in_dir): Don't allocate extra byte here.
|
||||
|
||||
Mon Aug 7 14:04:36 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob_in_dir): Allocate GLOB_MARK byte in case when
|
||||
(NFOUND == 0 && (FLAGS & GLOB_NOCHECK)).
|
||||
|
||||
Sat Apr 29 15:46:57 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (S_ISDIR): Define if undefined.
|
||||
|
||||
Tue Apr 25 17:17:19 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob.c (glob): If GLOB_MARK set, stat names to find
|
||||
directories and append slashes to them in final pass before
|
||||
sorting.
|
||||
(glob_in_dir): If GLOB_MARK set, just allocate the extra char for the
|
||||
slash; never append it here.
|
||||
|
||||
Wed Mar 8 13:38:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/configure.bat: Fixes from DJ.
|
||||
|
||||
Wed Feb 22 00:44:41 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/configure.in: Put AC_ISC_POSIX before AC_CONST.
|
||||
|
||||
Sun Feb 5 17:59:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* malloc/malloc.c (__malloc_extra_blocks): New variable.
|
||||
(malloc): When getting more core, get __malloc_extra_blocks extra;
|
||||
put the new block at the end of the free list and let the next loop
|
||||
iteration use the initial portion of it.
|
||||
* malloc/free.c (_free_internal): Account for twice
|
||||
__malloc_extra_blocks in deciding if we have so much extra memory
|
||||
we should return it to the system.
|
||||
* malloc/malloc.h (__malloc_extra_blocks): Declare it.
|
||||
* posix/glob.c (prefix_array, glob_pattern_p): Remove gratuitous
|
||||
const in parameter decl.
|
||||
|
||||
Fri Jan 27 17:53:49 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* posix/fnmatch.c: Declare errno if it's not defined.
|
||||
That's simpler than testing #if !defined(__GNU_LIBRARY__)
|
||||
&& !defined(STDC_HEADERS).
|
||||
|
||||
Thu Jan 26 00:02:01 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* io/ftw.c: Avoid `ret' as variable name.
|
||||
* posix/glob.c: Likewise.
|
||||
|
||||
Wed Jan 25 00:45:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/configure.in: Put AC_AIX and AC_MINIX early, before
|
||||
any compile tests.
|
||||
|
||||
Mon Jan 16 15:49:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/Makefile.in: Remove config.h and config.log.
|
||||
|
||||
Sun Jan 15 06:56:47 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/glob/configure.in: Add AC_CONST check.
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@ Cambridge, MA 02139, USA. */
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
|
||||
#if (defined (__cplusplus) || (defined (__STDC__) && __STDC__) \
|
||||
|| defined (WIN32))
|
||||
#undef __P
|
||||
#define __P(protos) protos
|
||||
#else /* Not C++ or ANSI C. */
|
||||
|
||||
22
glob/glob.c
22
glob/glob.c
@@ -65,7 +65,7 @@ Cambridge, MA 02139, USA. */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined (_AMIGA) && !defined (VMS)
|
||||
#if !defined (_AMIGA) && !defined (VMS) && !defined(WIN32)
|
||||
#include <pwd.h>
|
||||
#endif
|
||||
|
||||
@@ -106,7 +106,7 @@ extern int errno;
|
||||
#endif
|
||||
|
||||
|
||||
#if defined (POSIX) && !defined (__GNU_LIBRARY__)
|
||||
#if (defined (POSIX) || defined (WIN32)) && !defined (__GNU_LIBRARY__)
|
||||
/* Posix does not require that the d_ino field be present, and some
|
||||
systems do not provide it. */
|
||||
#define REAL_DIR_ENTRY(dp) 1
|
||||
@@ -166,7 +166,11 @@ extern void bcopy ();
|
||||
__inline
|
||||
#endif
|
||||
#ifndef __SASC
|
||||
#ifdef WIN32
|
||||
static void *
|
||||
#else
|
||||
static char *
|
||||
#endif
|
||||
my_realloc (p, n)
|
||||
char *p;
|
||||
unsigned int n;
|
||||
@@ -192,7 +196,11 @@ my_realloc (p, n)
|
||||
#include <alloca.h>
|
||||
#else /* Not HAVE_ALLOCA_H. */
|
||||
#ifndef _AIX
|
||||
#ifdef WIN32
|
||||
#include <malloc.h>
|
||||
#else
|
||||
extern char *alloca ();
|
||||
#endif /* WIN32 */
|
||||
#endif /* Not _AIX. */
|
||||
#endif /* sparc or HAVE_ALLOCA_H. */
|
||||
#endif /* GCC. */
|
||||
@@ -448,6 +456,10 @@ glob (pattern, flags, errfunc, pglob)
|
||||
#ifdef _AMIGA
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
dirname = "SYS:";
|
||||
#else
|
||||
#ifdef WIN32
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
dirname = "c:/users/default"; /* poor default */
|
||||
#else
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
{
|
||||
@@ -462,6 +474,7 @@ glob (pattern, flags, errfunc, pglob)
|
||||
}
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
dirname = (char *) "~"; /* No luck. */
|
||||
#endif /* WIN32 */
|
||||
#endif
|
||||
}
|
||||
else
|
||||
@@ -469,11 +482,16 @@ glob (pattern, flags, errfunc, pglob)
|
||||
#ifdef _AMIGA
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
dirname = "SYS:";
|
||||
#else
|
||||
#ifdef WIN32
|
||||
if (dirname == NULL || dirname[0] == '\0')
|
||||
dirname = "c:/users/default"; /* poor default */
|
||||
#else
|
||||
/* Look up specific user's home directory. */
|
||||
struct passwd *p = getpwnam (dirname + 1);
|
||||
if (p != NULL)
|
||||
dirname = p->pw_dir;
|
||||
#endif /* WIN32 */
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,8 @@ extern "C"
|
||||
#endif
|
||||
|
||||
#undef __ptr_t
|
||||
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
|
||||
#if (defined (__cplusplus) || (defined (__STDC__) && __STDC__) \
|
||||
|| defined (WIN32))
|
||||
#undef __P
|
||||
#define __P(protos) protos
|
||||
#define __ptr_t void *
|
||||
|
||||
12
main.c
12
main.c
@@ -2040,8 +2040,11 @@ define_makeflags (all, makefile)
|
||||
/* No flags. */
|
||||
flagstring[0] = '\0';
|
||||
else if (p[-1] == '-')
|
||||
/* Kill the final space and dash. */
|
||||
p[-2] = '\0';
|
||||
{
|
||||
/* Kill the final space and dash. */
|
||||
p -= 2;
|
||||
*p = '\0';
|
||||
}
|
||||
else
|
||||
/* Terminate the string. */
|
||||
*p = '\0';
|
||||
@@ -2138,7 +2141,9 @@ print_version ()
|
||||
%s\tFree Software Foundation, Inc.\n\
|
||||
%sThis is free software; see the source for copying conditions.\n\
|
||||
%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
|
||||
%sPARTICULAR PURPOSE.\n\n", precede, precede, precede, precede, precede);
|
||||
%sPARTICULAR PURPOSE.\n\n\
|
||||
%sReport bugs to <bug-gnu-utils@prep.ai.mit.edu>.\n\n",
|
||||
precede, precede, precede, precede, precede, precede);
|
||||
|
||||
printed_version = 1;
|
||||
|
||||
@@ -2152,7 +2157,6 @@ print_version ()
|
||||
static void
|
||||
print_data_base ()
|
||||
{
|
||||
extern char *ctime ();
|
||||
time_t when;
|
||||
|
||||
when = time ((time_t *) 0);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# This file is part of GNU Make.
|
||||
#
|
||||
# VMS extensions from GNU Make 3.60 imported by
|
||||
# Klaus Kämpf (kkaempf@didymus.rmi.de)
|
||||
# Klaus Kämpf (kkaempf@progis.de) of proGIS Software, Aachen, Germany
|
||||
#
|
||||
# GNU Make is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
This is the VMS port of GNU Make version 3.74.
|
||||
This is the VMS port of GNU Make version 3.75.
|
||||
|
||||
It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
|
||||
|
||||
This port was done by Klaus Kämpf (kkaempf@didymus.rmi.de)
|
||||
This port was done by Klaus Kämpf (kkaempf@progis.de) of
|
||||
proGIS Software, Aachen, Germany
|
||||
|
||||
To build Make, simply type @makefile. This should compile all the
|
||||
necessary files and link Make.
|
||||
|
||||
1
remake.c
1
remake.c
@@ -1039,6 +1039,7 @@ f_mtime (file, search)
|
||||
static unsigned long vms_now[2]; /* assumes 32 bit long ! */
|
||||
sys$gettim (vms_now);
|
||||
now = ((vms_now[0]>>24) & 0xff) + ((vms_now[1]<<8) & 0xffffff00);
|
||||
if (mtime > now)
|
||||
#else
|
||||
extern time_t time ();
|
||||
if (mtime > time (&now))
|
||||
|
||||
4599
texinfo.tex
Normal file
4599
texinfo.tex
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
char *version_string = "3.74.6";
|
||||
char *version_string = "3.75";
|
||||
|
||||
/*
|
||||
Local variables:
|
||||
|
||||
@@ -195,6 +195,7 @@ vms_stat (name, buf)
|
||||
|
||||
status = sys$qiow(0,DevChan,IO$_ACCESS,&iosb,0,0,
|
||||
&FibDesc,&FileName,0,0,&Atr,0);
|
||||
sys$dassgn (DevChan);
|
||||
if (!(status & 1))
|
||||
return -1;
|
||||
status = iosb[0];
|
||||
|
||||
3
vmsify.c
3
vmsify.c
@@ -3,7 +3,8 @@
|
||||
|
||||
Module for vms <-> unix file name conversion
|
||||
|
||||
Written by Klaus Kämpf (kkaempf@didymus.rmi.de)
|
||||
Written by Klaus Kämpf (kkaempf@progis.de)
|
||||
of proGIS Software, Aachen, Germany
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#ifndef _PATHSTUFF_H
|
||||
#define _PATHSTUFF_H
|
||||
|
||||
extern char * convert_Path_to_win32(char *Path, char to_delim);
|
||||
extern char * w32ify(char *file, int resolve);
|
||||
extern char * getcwd_fs(char *buf, int len);
|
||||
|
||||
#define convert_vpath_to_win32(vpath, delim) convert_Path_to_win32(vpath, delim)
|
||||
|
||||
#endif
|
||||
#ifndef _PATHSTUFF_H
|
||||
#define _PATHSTUFF_H
|
||||
|
||||
extern char * convert_Path_to_win32(char *Path, char to_delim);
|
||||
extern char * convert_vpath_to_win32(char *Path, char to_delim);
|
||||
extern char * w32ify(char *file, int resolve);
|
||||
extern char * getcwd_fs(char *buf, int len);
|
||||
|
||||
#endif
|
||||
|
||||
458
w32/pathstuff.c
458
w32/pathstuff.c
@@ -1,219 +1,239 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "make.h"
|
||||
|
||||
/*
|
||||
* Convert delimiter separated path to Canonical format.
|
||||
*/
|
||||
char *
|
||||
convert_Path_to_win32(char *Path, char to_delim)
|
||||
{
|
||||
char *etok; /* token separator for old Path */
|
||||
char *p; /* points to element of old Path */
|
||||
|
||||
/* is this a multi-element Path ? */
|
||||
for (p = Path, etok = strpbrk(p, ":;");
|
||||
etok;
|
||||
etok = strpbrk(p, ":;"))
|
||||
if ((etok - p) == 1) {
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
etok[-1] = to_delim;
|
||||
etok[0] = to_delim;
|
||||
p = ++etok;
|
||||
continue; /* ignore empty bucket */
|
||||
} else if (etok = strpbrk(etok+1, ":;")) {
|
||||
/* found one to count, handle drive letter */
|
||||
*etok = to_delim;
|
||||
p = ++etok;
|
||||
} else
|
||||
/* all finished, force abort */
|
||||
p += strlen(p);
|
||||
} else {
|
||||
/* found another one, no drive letter */
|
||||
*etok = to_delim;
|
||||
p = ++etok;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* convert to backward slashes */
|
||||
for (p = Path, p = strchr(p, '/'); p; p = strchr(p, '/'))
|
||||
*p = '\\';
|
||||
#endif
|
||||
return Path;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert to forward slashes. Resolve to full pathname optionally
|
||||
*/
|
||||
char *
|
||||
w32ify(char *filename, int resolve)
|
||||
{
|
||||
static char w32_path[FILENAME_MAX];
|
||||
char *p;
|
||||
|
||||
if (resolve)
|
||||
_fullpath(w32_path, filename, sizeof (w32_path));
|
||||
else
|
||||
strncpy(w32_path, filename, sizeof (w32_path));
|
||||
|
||||
for (p = w32_path; p && *p; p++)
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
|
||||
return w32_path;
|
||||
}
|
||||
|
||||
char *
|
||||
getcwd_fs(char* buf, int len)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if (p = getcwd(buf, len)) {
|
||||
char *q = w32ify(buf, 0);
|
||||
strncpy(buf, q, len);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
#ifdef unused
|
||||
/*
|
||||
* Convert delimiter separated pathnames (e.g. PATH) or single file pathname
|
||||
* (e.g. c:/foo, c:\bar) to NutC format. If we are handed a string that
|
||||
* _NutPathToNutc() fails to convert, just return the path we were handed
|
||||
* and assume the caller will know what to do with it (It was probably
|
||||
* a mistake to try and convert it anyway due to some of the bizarre things
|
||||
* that might look like pathnames in makefiles).
|
||||
*/
|
||||
char *
|
||||
convert_path_to_nutc(char *path)
|
||||
{
|
||||
int count; /* count of path elements */
|
||||
char *nutc_path; /* new NutC path */
|
||||
int nutc_path_len; /* length of buffer to allocate for new path */
|
||||
char *pathp; /* pointer to nutc_path used to build it */
|
||||
char *etok; /* token separator for old path */
|
||||
char *p; /* points to element of old path */
|
||||
char sep; /* what flavor of separator used in old path */
|
||||
char *rval;
|
||||
|
||||
/* is this a multi-element path ? */
|
||||
for (p = path, etok = strpbrk(p, ":;"), count = 0;
|
||||
etok;
|
||||
etok = strpbrk(p, ":;"))
|
||||
if ((etok - p) == 1) {
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
p = ++etok;
|
||||
continue; /* ignore empty bucket */
|
||||
} else if (etok = strpbrk(etok+1, ":;"))
|
||||
/* found one to count, handle drive letter */
|
||||
p = ++etok, count++;
|
||||
else
|
||||
/* all finished, force abort */
|
||||
p += strlen(p);
|
||||
} else
|
||||
/* found another one, no drive letter */
|
||||
p = ++etok, count++;
|
||||
|
||||
if (count) {
|
||||
count++; /* x1;x2;x3 <- need to count x3 */
|
||||
|
||||
/*
|
||||
* Hazard a guess on how big the buffer needs to be.
|
||||
* We have to convert things like c:/foo to /c=/foo.
|
||||
*/
|
||||
nutc_path_len = strlen(path) + (count*2) + 1;
|
||||
nutc_path = xmalloc(nutc_path_len);
|
||||
pathp = nutc_path;
|
||||
*pathp = '\0';
|
||||
|
||||
/*
|
||||
* Loop through PATH and convert one elemnt of the path at at
|
||||
* a time. Single file pathnames will fail this and fall
|
||||
* to the logic below loop.
|
||||
*/
|
||||
for (p = path, etok = strpbrk(p, ":;");
|
||||
etok;
|
||||
etok = strpbrk(p, ":;")) {
|
||||
|
||||
/* don't trip up on device specifiers or empty path slots */
|
||||
if ((etok - p) == 1)
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
p = ++etok;
|
||||
continue;
|
||||
} else if ((etok = strpbrk(etok+1, ":;")) == NULL)
|
||||
break; /* thing found was a WIN32 pathname */
|
||||
|
||||
/* save separator */
|
||||
sep = *etok;
|
||||
|
||||
/* terminate the current path element -- temporarily */
|
||||
*etok = '\0';
|
||||
|
||||
#ifdef __NUTC__
|
||||
/* convert to NutC format */
|
||||
if (_NutPathToNutc(p, pathp, 0) == FALSE) {
|
||||
free(nutc_path);
|
||||
rval = savestring(path, strlen(path));
|
||||
return rval;
|
||||
}
|
||||
#else
|
||||
*pathp++ = '/';
|
||||
*pathp++ = p[0];
|
||||
*pathp++ = '=';
|
||||
*pathp++ = '/';
|
||||
strcpy(pathp, &p[2]);
|
||||
#endif
|
||||
|
||||
pathp += strlen(pathp);
|
||||
*pathp++ = ':'; /* use Unix style path separtor for new path */
|
||||
*pathp = '\0'; /* make sure we are null terminaed */
|
||||
|
||||
/* restore path separator */
|
||||
*etok = sep;
|
||||
|
||||
/* point p to first char of next path element */
|
||||
p = ++etok;
|
||||
|
||||
}
|
||||
} else {
|
||||
nutc_path_len = strlen(path) + 3;
|
||||
nutc_path = xmalloc(nutc_path_len);
|
||||
pathp = nutc_path;
|
||||
*pathp = '\0';
|
||||
p = path;
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, here we handle the last element in PATH (e.g. c of a;b;c)
|
||||
* or the path was a single filename and will be converted
|
||||
* here. Note, testing p here assures that we don't trip up
|
||||
* on paths like a;b; which have trailing delimiter followed by
|
||||
* nothing.
|
||||
*/
|
||||
if (*p != '\0') {
|
||||
#ifdef __NUTC__
|
||||
if (_NutPathToNutc(p, pathp, 0) == FALSE) {
|
||||
free(nutc_path);
|
||||
rval = savestring(path, strlen(path));
|
||||
return rval;
|
||||
}
|
||||
#else
|
||||
*pathp++ = '/';
|
||||
*pathp++ = p[0];
|
||||
*pathp++ = '=';
|
||||
*pathp++ = '/';
|
||||
strcpy(pathp, &p[2]);
|
||||
#endif
|
||||
} else
|
||||
*(pathp-1) = '\0'; /* we're already done, don't leave trailing : */
|
||||
|
||||
rval = savestring(nutc_path, strlen(nutc_path));
|
||||
free(nutc_path);
|
||||
return rval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "make.h"
|
||||
#include "pathstuff.h"
|
||||
|
||||
/*
|
||||
* Convert delimiter separated vpath to Canonical format.
|
||||
*/
|
||||
char *
|
||||
convert_vpath_to_win32(char *Path, char to_delim)
|
||||
{
|
||||
char *etok; /* token separator for old Path */
|
||||
|
||||
/*
|
||||
* Convert all spaces to delimiters. Note that pathnames which
|
||||
* contain blanks get trounced here. Use 8.3 format as a workaround.
|
||||
*/
|
||||
for (etok = Path; etok && *etok; etok++)
|
||||
if (isblank(*etok))
|
||||
*etok = to_delim;
|
||||
|
||||
return (convert_Path_to_win32(Path, to_delim));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert delimiter separated path to Canonical format.
|
||||
*/
|
||||
char *
|
||||
convert_Path_to_win32(char *Path, char to_delim)
|
||||
{
|
||||
char *etok; /* token separator for old Path */
|
||||
char *p; /* points to element of old Path */
|
||||
|
||||
/* is this a multi-element Path ? */
|
||||
for (p = Path, etok = strpbrk(p, ":;");
|
||||
etok;
|
||||
etok = strpbrk(p, ":;"))
|
||||
if ((etok - p) == 1) {
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
etok[-1] = to_delim;
|
||||
etok[0] = to_delim;
|
||||
p = ++etok;
|
||||
continue; /* ignore empty bucket */
|
||||
} else if (etok = strpbrk(etok+1, ":;")) {
|
||||
/* found one to count, handle drive letter */
|
||||
*etok = to_delim;
|
||||
p = ++etok;
|
||||
} else
|
||||
/* all finished, force abort */
|
||||
p += strlen(p);
|
||||
} else {
|
||||
/* found another one, no drive letter */
|
||||
*etok = to_delim;
|
||||
p = ++etok;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* convert to backward slashes */
|
||||
for (p = Path, p = strchr(p, '/'); p; p = strchr(p, '/'))
|
||||
*p = '\\';
|
||||
#endif
|
||||
return Path;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert to forward slashes. Resolve to full pathname optionally
|
||||
*/
|
||||
char *
|
||||
w32ify(char *filename, int resolve)
|
||||
{
|
||||
static char w32_path[FILENAME_MAX];
|
||||
char *p;
|
||||
|
||||
if (resolve)
|
||||
_fullpath(w32_path, filename, sizeof (w32_path));
|
||||
else
|
||||
strncpy(w32_path, filename, sizeof (w32_path));
|
||||
|
||||
for (p = w32_path; p && *p; p++)
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
|
||||
return w32_path;
|
||||
}
|
||||
|
||||
char *
|
||||
getcwd_fs(char* buf, int len)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if (p = getcwd(buf, len)) {
|
||||
char *q = w32ify(buf, 0);
|
||||
strncpy(buf, q, len);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
#ifdef unused
|
||||
/*
|
||||
* Convert delimiter separated pathnames (e.g. PATH) or single file pathname
|
||||
* (e.g. c:/foo, c:\bar) to NutC format. If we are handed a string that
|
||||
* _NutPathToNutc() fails to convert, just return the path we were handed
|
||||
* and assume the caller will know what to do with it (It was probably
|
||||
* a mistake to try and convert it anyway due to some of the bizarre things
|
||||
* that might look like pathnames in makefiles).
|
||||
*/
|
||||
char *
|
||||
convert_path_to_nutc(char *path)
|
||||
{
|
||||
int count; /* count of path elements */
|
||||
char *nutc_path; /* new NutC path */
|
||||
int nutc_path_len; /* length of buffer to allocate for new path */
|
||||
char *pathp; /* pointer to nutc_path used to build it */
|
||||
char *etok; /* token separator for old path */
|
||||
char *p; /* points to element of old path */
|
||||
char sep; /* what flavor of separator used in old path */
|
||||
char *rval;
|
||||
|
||||
/* is this a multi-element path ? */
|
||||
for (p = path, etok = strpbrk(p, ":;"), count = 0;
|
||||
etok;
|
||||
etok = strpbrk(p, ":;"))
|
||||
if ((etok - p) == 1) {
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
p = ++etok;
|
||||
continue; /* ignore empty bucket */
|
||||
} else if (etok = strpbrk(etok+1, ":;"))
|
||||
/* found one to count, handle drive letter */
|
||||
p = ++etok, count++;
|
||||
else
|
||||
/* all finished, force abort */
|
||||
p += strlen(p);
|
||||
} else
|
||||
/* found another one, no drive letter */
|
||||
p = ++etok, count++;
|
||||
|
||||
if (count) {
|
||||
count++; /* x1;x2;x3 <- need to count x3 */
|
||||
|
||||
/*
|
||||
* Hazard a guess on how big the buffer needs to be.
|
||||
* We have to convert things like c:/foo to /c=/foo.
|
||||
*/
|
||||
nutc_path_len = strlen(path) + (count*2) + 1;
|
||||
nutc_path = xmalloc(nutc_path_len);
|
||||
pathp = nutc_path;
|
||||
*pathp = '\0';
|
||||
|
||||
/*
|
||||
* Loop through PATH and convert one elemnt of the path at at
|
||||
* a time. Single file pathnames will fail this and fall
|
||||
* to the logic below loop.
|
||||
*/
|
||||
for (p = path, etok = strpbrk(p, ":;");
|
||||
etok;
|
||||
etok = strpbrk(p, ":;")) {
|
||||
|
||||
/* don't trip up on device specifiers or empty path slots */
|
||||
if ((etok - p) == 1)
|
||||
if (*(etok - 1) == ';' ||
|
||||
*(etok - 1) == ':') {
|
||||
p = ++etok;
|
||||
continue;
|
||||
} else if ((etok = strpbrk(etok+1, ":;")) == NULL)
|
||||
break; /* thing found was a WIN32 pathname */
|
||||
|
||||
/* save separator */
|
||||
sep = *etok;
|
||||
|
||||
/* terminate the current path element -- temporarily */
|
||||
*etok = '\0';
|
||||
|
||||
#ifdef __NUTC__
|
||||
/* convert to NutC format */
|
||||
if (_NutPathToNutc(p, pathp, 0) == FALSE) {
|
||||
free(nutc_path);
|
||||
rval = savestring(path, strlen(path));
|
||||
return rval;
|
||||
}
|
||||
#else
|
||||
*pathp++ = '/';
|
||||
*pathp++ = p[0];
|
||||
*pathp++ = '=';
|
||||
*pathp++ = '/';
|
||||
strcpy(pathp, &p[2]);
|
||||
#endif
|
||||
|
||||
pathp += strlen(pathp);
|
||||
*pathp++ = ':'; /* use Unix style path separtor for new path */
|
||||
*pathp = '\0'; /* make sure we are null terminaed */
|
||||
|
||||
/* restore path separator */
|
||||
*etok = sep;
|
||||
|
||||
/* point p to first char of next path element */
|
||||
p = ++etok;
|
||||
|
||||
}
|
||||
} else {
|
||||
nutc_path_len = strlen(path) + 3;
|
||||
nutc_path = xmalloc(nutc_path_len);
|
||||
pathp = nutc_path;
|
||||
*pathp = '\0';
|
||||
p = path;
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, here we handle the last element in PATH (e.g. c of a;b;c)
|
||||
* or the path was a single filename and will be converted
|
||||
* here. Note, testing p here assures that we don't trip up
|
||||
* on paths like a;b; which have trailing delimiter followed by
|
||||
* nothing.
|
||||
*/
|
||||
if (*p != '\0') {
|
||||
#ifdef __NUTC__
|
||||
if (_NutPathToNutc(p, pathp, 0) == FALSE) {
|
||||
free(nutc_path);
|
||||
rval = savestring(path, strlen(path));
|
||||
return rval;
|
||||
}
|
||||
#else
|
||||
*pathp++ = '/';
|
||||
*pathp++ = p[0];
|
||||
*pathp++ = '=';
|
||||
*pathp++ = '/';
|
||||
strcpy(pathp, &p[2]);
|
||||
#endif
|
||||
} else
|
||||
*(pathp-1) = '\0'; /* we're already done, don't leave trailing : */
|
||||
|
||||
rval = savestring(nutc_path, strlen(nutc_path));
|
||||
free(nutc_path);
|
||||
return rval;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user