ra@is.uu.no (Robert Andersson) (07/04/89)
The following sums up what I had to do to get GNU Make 3.54 up and
running on an NCR Tower 32/400, OS Release 2.01.00 (aka SYSV.2).
Context diffs follow at the end of the message.
The final result seems ok, though I have not tested it thoroughly yet.
On the disappointing side.... GNU Make uses more time than SYSV Make
to do its job, both on sys, user and elapsed time. This came as a
surprise, and makes me wonder if GNU Make could do with a bit of
profiling?
Makefile: LOADLIBES = -lPW (alloca is in libPW.a)
LOAD_AVG = -DNO_LDAV (No such thing on SYSV)
defines = -DUSG -DDIRLIB (DIRLIB is a new define I invented
to tell GNU Make that I am using
the Public Domain directory routi-
nes made by Doug Gwyn)
glob.c: If defined(USGr3) || defined(DIRLIB) -> Use directory routines.
USG: Added missing #define of rindex
Removed declaration of memcpy (since it is in memory.h anyway)
job.c: USG: If USGr3 is not defined, include <errno.h>
Added declaration of child_handler before it was used.
Must not use getdtablesize, use _NFILE instead.
read.c: Added declaration of struct passwd *getpwnam();
commands.c: USG: Must not use sigmask().
dir.c: If defined(USGr3) || defined(DIRLIB) -> Use directory routines.
remote.c: Change remote-customs.c to remote-cust.c
Renamed remote-customs.c to remote-cust.c (Because of 14 char filename limit)
*** glob.c.orig Mon Jul 3 14:42:32 1989
--- glob.c Mon Jul 3 18:25:47 1989
***************
*** 21,31 ****
#include <sys/types.h>
! #ifdef USGr3
#include <dirent.h>
#define direct dirent
#define D_NAMLEN(d) strlen((d)->d_name)
! #else /* not USGr3 */
#define D_NAMLEN(d) ((d)->d_namlen)
# ifdef USG
#include "ndir.h" /* Get ndir.h from the Emacs distribution. */
--- 21,31 ----
#include <sys/types.h>
! #if defined(USGr3) || defined(DIRLIB)
#include <dirent.h>
#define direct dirent
#define D_NAMLEN(d) strlen((d)->d_name)
! #else /* not USGr3 || DIRLIB */
#define D_NAMLEN(d) ((d)->d_namlen)
# ifdef USG
#include "ndir.h" /* Get ndir.h from the Emacs distribution. */
***************
*** 32,45 ****
# else /* not USG */
#include <sys/dir.h>
# endif /* USG */
! #endif /* USGr3 */
#ifdef USG
#include <memory.h>
#include <string.h>
#define bcopy(s, d, n) ((void) memcpy ((d), (s), (n)))
- extern char *memcpy ();
#else /* not USG */
#include <strings.h>
--- 32,45 ----
# else /* not USG */
#include <sys/dir.h>
# endif /* USG */
! #endif /* USGr3 || DIRLIB */
#ifdef USG
#include <memory.h>
#include <string.h>
#define bcopy(s, d, n) ((void) memcpy ((d), (s), (n)))
+ #define rindex(s, c) strrchr((s), (c))
#else /* not USG */
#include <strings.h>
*** job.c.orig Mon Jul 3 14:51:23 1989
--- job.c Mon Jul 3 15:14:36 1989
***************
*** 59,64 ****
--- 59,69 ----
#endif /* USG and don't have <sys/wait.h>. */
+ #if defined(USG) && !defined(USGr3)
+ #include <errno.h>
+ #endif
+
+
extern int fork (), wait (), kill (), getpid ();
extern void _exit ();
***************
*** 141,146 ****
--- 146,152 ----
unblock_children ()
{
#ifdef USG
+ int child_handler();
(void) signal (SIGCLD, child_handler);
#else
(void) sigsetmask (sigblock (0) & ~sigmask (SIGCHLD));
***************
*** 555,561 ****
--- 561,571 ----
/* Free up file descriptors. */
{
register int d;
+ #ifdef USG
+ int max = _NFILE; /* This should be defined in stdio.h */
+ #else
int max = getdtablesize ();
+ #endif
for (d = 3; d < max; ++d)
(void) close (d);
}
*** read.c.orig Mon Jul 3 15:09:48 1989
--- read.c Mon Jul 3 15:10:10 1989
***************
*** 22,27 ****
--- 22,28 ----
#include "variable.h"
#include <pwd.h>
+ struct passwd *getpwnam();
static void read_makefile ();
*** commands.c.orig Mon Jul 3 15:12:20 1989
--- commands.c Mon Jul 3 15:31:25 1989
***************
*** 375,382 ****
--- 375,384 ----
return 0;
}
+ #ifndef USG
#define PROPAGATED_SIGNAL_MASK \
(sigmask (SIGTERM) | sigmask (SIGINT) | sigmask (SIGHUP) | sigmask (SIGQUIT))
+ #endif
/* Handle fatal signals. */
***************
*** 405,411 ****
--- 407,417 ----
/* If we got a signal that means the user
wanted to kill make, remove pending targets. */
+ #ifndef USG
if (PROPAGATED_SIGNAL_MASK & sigmask (sig))
+ #else
+ if (sig == SIGTERM || sig == SIGINT || sig == SIGHUP || sig == SIGQUIT)
+ #endif
{
register struct child *c;
block_children ();
*** dir.c.orig Mon Jul 3 18:23:23 1989
--- dir.c Mon Jul 3 18:25:07 1989
***************
*** 17,27 ****
#include "make.h"
! #ifdef USGr3
#include <dirent.h>
#define direct dirent
#define D_NAMLEN(d) strlen((d)->d_name)
! #else /* Not USGr3. */
#define D_NAMLEN(d) ((d)->d_namlen)
# ifdef USG
#include "ndir.h" /* Get ndir.h from the Emacs distribution. */
--- 17,27 ----
#include "make.h"
! #if defined(USGr3) || defined(DIRLIB)
#include <dirent.h>
#define direct dirent
#define D_NAMLEN(d) strlen((d)->d_name)
! #else /* Not USGr3 || DIRLIB */
#define D_NAMLEN(d) ((d)->d_namlen)
# ifdef USG
#include "ndir.h" /* Get ndir.h from the Emacs distribution. */
***************
*** 28,34 ****
# else /* Not USG. */
#include <sys/dir.h>
# endif /* USG. */
! #endif /* USGr3. */
/* Hash table of directories. */
--- 28,34 ----
# else /* Not USG. */
#include <sys/dir.h>
# endif /* USG. */
! #endif /* USGr3 || DIRLIB */
/* Hash table of directories. */
--
Robert Andersson, International Systems, Oslo, Norway
Internet: ra@is.uu.no
UUCP: ...!{uunet,mcvax,ifi}!is.uu.no!ra