summaryrefslogtreecommitdiff
path: root/dmake/unix/xenix
diff options
context:
space:
mode:
Diffstat (limited to 'dmake/unix/xenix')
-rw-r--r--dmake/unix/xenix/config.mk27
-rw-r--r--dmake/unix/xenix/make.sh60
-rw-r--r--dmake/unix/xenix/public.h167
-rw-r--r--dmake/unix/xenix/pwd/config.mk23
-rw-r--r--dmake/unix/xenix/pwd/getcwd.c231
-rw-r--r--dmake/unix/xenix/pwd/make.sh62
-rw-r--r--dmake/unix/xenix/pwd/public.h167
-rw-r--r--dmake/unix/xenix/pwd/template.mk7
-rw-r--r--dmake/unix/xenix/stdlib.h50
-rw-r--r--dmake/unix/xenix/template.mk7
-rw-r--r--dmake/unix/xenix/time.h32
11 files changed, 833 insertions, 0 deletions
diff --git a/dmake/unix/xenix/config.mk b/dmake/unix/xenix/config.mk
new file mode 100644
index 000000000000..a4f8f78f3ee1
--- /dev/null
+++ b/dmake/unix/xenix/config.mk
@@ -0,0 +1,27 @@
+# This is the SysV R3 UNIX configuration file for DMAKE
+# It simply modifies the values of SRC, and checks to see if
+# OSENVIRONMENT is defined. If so it includes the appropriate
+# config.mk file.
+#
+# It also sets the values of .SOURCE.c and .SOURCE.h to include the local
+# directory.
+#
+osrdir := $(OS)$(DIRSEPSTR)$(OSRELEASE)
+
+# The following are required sources
+OSDSRC :=
+.IF $(OSDSRC)
+ SRC += $(OSDSRC)
+ .SETDIR=$(osrdir) : $(OSDSRC)
+.END
+
+.SOURCE.h : $(osrdir)
+
+# Local configuration modifications for CFLAGS, there's local SysV includes
+# too.
+CFLAGS += -I$(osrdir) -DM_XENIX
+
+# See if we modify anything in the lower levels.
+.IF $(OSENVIRONMENT) != $(NULL)
+ .INCLUDE .IGNORE : $(osrdir)$(DIRSEPSTR)$(OSENVIRONMENT)$(DIRSEPSTR)config.mk
+.END
diff --git a/dmake/unix/xenix/make.sh b/dmake/unix/xenix/make.sh
new file mode 100644
index 000000000000..597936f38061
--- /dev/null
+++ b/dmake/unix/xenix/make.sh
@@ -0,0 +1,60 @@
+mkdir objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O infer.c
+mv infer.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O make.c
+mv make.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O stat.c
+mv stat.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O expand.c
+mv expand.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O dmstring.c
+mv dmstring.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O hash.c
+mv hash.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O dag.c
+mv dag.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O dmake.c
+mv dmake.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O path.c
+mv path.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O imacs.c
+mv imacs.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O sysintf.c
+mv sysintf.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O parse.c
+mv parse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O getinp.c
+mv getinp.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O quit.c
+mv quit.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O state.c
+mv state.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O dmdump.c
+mv dmdump.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O macparse.c
+mv macparse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O rulparse.c
+mv rulparse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O percent.c
+mv percent.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O function.c
+mv function.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/arlib.c
+mv arlib.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/dirbrk.c
+mv dirbrk.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/rmprq.c
+mv rmprq.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/ruletab.c
+mv ruletab.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/runargv.c
+mv runargv.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -O unix/dcache.c
+mv dcache.o objects
+cc -O -o dmake objects/infer.o objects/make.o objects/stat.o objects/expand.o \
+objects/dmstring.o objects/hash.o objects/dag.o objects/dmake.o objects/path.o \
+objects/imacs.o objects/sysintf.o objects/parse.o objects/getinp.o \
+objects/quit.o objects/state.o objects/dmdump.o objects/macparse.o \
+objects/rulparse.o objects/percent.o objects/function.o objects/arlib.o \
+objects/dirbrk.o objects/rmprq.o objects/ruletab.o objects/runargv.o objects/dcache.o
+cp unix/xenix/template.mk startup/config.mk
diff --git a/dmake/unix/xenix/public.h b/dmake/unix/xenix/public.h
new file mode 100644
index 000000000000..7c24a76b9a0b
--- /dev/null
+++ b/dmake/unix/xenix/public.h
@@ -0,0 +1,167 @@
+/* RCS $Id: public.h,v 1.9 2007-10-15 15:57:31 ihi Exp $
+-- WARNING -- This file is AUTOMATICALLY GENERATED DO NOT EDIT IT
+--
+--
+-- SYNOPSIS
+-- Local functions exported to be visible by others.
+--
+-- DESCRIPTION
+-- This file is generated by 'genpub'. Function declarations
+-- that appear in this file are extracted by 'genpub' from
+-- source files. Any function in the source file whose definition
+-- appears like:
+--
+-- PUBLIC return_type
+-- function( arg_list );
+-- type_expr1 arg1;
+-- ...
+--
+-- has its definition extracted and a line of the form:
+--
+-- return_type function ANSI((type_expr1,type_expr2,...));
+--
+-- entered into the output file.
+--
+-- AUTHOR
+-- Dennis Vadura, dvadura@dmake.wticorp.com
+--
+-- WWW
+-- http://dmake.wticorp.com/
+--
+-- COPYRIGHT
+-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved.
+--
+-- This program is NOT free software; you can redistribute it and/or
+-- modify it under the terms of the Software License Agreement Provided
+-- in the file <distribution-root>/readme/license.txt.
+--
+-- LOG
+-- Use cvs log to obtain detailed change logs.
+*/
+
+#ifndef _DMAKE_PUBLIC_h
+#define _DMAKE_PUBLIC_h
+
+#ifdef EXTERN
+#undef EXTERN
+#endif
+#if defined(DEFINE_DMAKE_VARIABLES)
+#define EXTERN
+#else
+#define EXTERN extern
+#endif
+
+/***** genpub: Begin list of generated function headers */
+void Infer_recipe ANSI((CELLPTR, CELLPTR));
+int Make_targets ANSI(());
+int Make ANSI((CELLPTR, CELLPTR));
+int Exec_commands ANSI((CELLPTR));
+void Print_cmnd ANSI((char *, int, int));
+int Push_dir ANSI((char *, char *, int));
+void Pop_dir ANSI((int));
+void Append_line ANSI((char *, int, FILE *, char *, int, int));
+void Stat_target ANSI((CELLPTR, int, int));
+char *Expand ANSI((char *));
+char *Apply_edit ANSI((char *, char *, char *, int, int));
+void Map_esc ANSI((char *));
+char* Apply_modifiers ANSI((int, char *));
+char* Tokenize ANSI((char *, char *, char, int));
+char* ScanToken ANSI((char *, char **, int));
+char *DmStrJoin ANSI((char *, char *, int, int));
+char *DmStrAdd ANSI((char *, char *, int));
+char *DmStrApp ANSI((char *, char *));
+char *DmStrDup ANSI((char *));
+char *DmStrDup2 ANSI((char *));
+char *DmStrPbrk ANSI((char *, char *));
+char *DmStrSpn ANSI((char *, char *));
+char *DmStrStr ANSI((char *, char *));
+char *DmSubStr ANSI((char *, char *));
+uint16 Hash ANSI((char *, uint32 *));
+HASHPTR Get_name ANSI((char *, HASHPTR *, int));
+HASHPTR Search_table ANSI((HASHPTR *, char *, uint16 *, uint32 *));
+HASHPTR Push_macro ANSI((HASHPTR));
+HASHPTR Pop_macro ANSI((HASHPTR));
+HASHPTR Def_macro ANSI((char *, char *, int));
+CELLPTR Def_cell ANSI((char *));
+LINKPTR Add_prerequisite ANSI((CELLPTR, CELLPTR, int, int));
+void Clear_prerequisites ANSI((CELLPTR));
+int Test_circle ANSI((CELLPTR, int));
+STRINGPTR Def_recipe ANSI((char *, STRINGPTR, int, int));
+t_attr Rcp_attribute ANSI((char *));
+int main ANSI((int, char **));
+FILE *Openfile ANSI((char *, int, int));
+FILE *Closefile ANSI(());
+FILE *Search_file ANSI((char *, char **));
+char *Filename ANSI(());
+int Nestlevel ANSI(());
+FILE *TryFiles ANSI((LINKPTR));
+void Fatal ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void Error ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void Warning ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void No_ram ANSI(());
+void Usage ANSI((int));
+void Version ANSI(());
+char *Get_suffix ANSI((char *));
+char *Basename ANSI((char *));
+char *Filedir ANSI((char *));
+char *Build_path ANSI((char *, char *));
+void Make_rules ANSI(());
+void Create_macro_vars ANSI(());
+time_t Do_stat ANSI((char *, char *, char **, int));
+int Do_touch ANSI((char *, char *, char **));
+void Void_lib_cache ANSI((char *, char *));
+time_t Do_time ANSI(());
+void Do_profile_output ANSI((char *, uint16, CELLPTR));
+int Do_cmnd ANSI((char **, int, int, CELLPTR, t_attr, int));
+char ** Pack_argv ANSI((int, int, char **));
+char *Read_env_string ANSI((char *));
+int Write_env_string ANSI((char *, char *));
+void ReadEnvironment ANSI(());
+void Catch_signals ANSI((void (*)(int)));
+void Clear_signals ANSI(());
+void Prolog ANSI((int, char* []));
+void Epilog ANSI((int));
+char *Get_current_dir ANSI(());
+int Set_dir ANSI((char*));
+char Get_switch_char ANSI(());
+FILE* Get_temp ANSI((char **, char *));
+FILE *Start_temp ANSI((char *, CELLPTR, char **));
+void Open_temp_error ANSI((char *, char *));
+void Link_temp ANSI((CELLPTR, FILE *, char *));
+void Close_temp ANSI((CELLPTR, FILE *));
+void Unlink_temp_files ANSI((CELLPTR));
+void Handle_result ANSI((int, int, int, CELLPTR));
+void Update_time_stamp ANSI((CELLPTR));
+int Remove_file ANSI((char *));
+void Parse ANSI((FILE *));
+int Get_line ANSI((char *, FILE *));
+char *Do_comment ANSI((char *, char **, int));
+char *Get_token ANSI((TKSTRPTR, char *, int));
+void Quit ANSI((int));
+void Read_state ANSI(());
+void Write_state ANSI(());
+int Check_state ANSI((CELLPTR, STRINGPTR *, int));
+void Dump ANSI(());
+void Dump_recipe ANSI((STRINGPTR));
+int Parse_macro ANSI((char *, int));
+int Macro_op ANSI((char *));
+int Parse_rule_def ANSI((int *));
+int Rule_op ANSI((char *));
+void Add_recipe_to_list ANSI((char *, int, int));
+void Bind_rules_to_targets ANSI((int));
+int Set_group_attributes ANSI((char *));
+DFALINKPTR Match_dfa ANSI((char *));
+void Check_circle_dfa ANSI(());
+void Add_nfa ANSI((char *));
+char *Exec_function ANSI((char *));
+time_t seek_arch ANSI((char *, char *));
+int touch_arch ANSI(( char *, char *));
+void void_lcache ANSI(( char *, char *));
+int If_root_path ANSI((char *));
+void Remove_prq ANSI((CELLPTR));
+int runargv ANSI((CELLPTR, int, int, t_attr, char **));
+int Wait_for_child ANSI((int, int));
+void Clean_up_processes ANSI(());
+time_t CacheStat ANSI((char *, int));
+
+#endif
diff --git a/dmake/unix/xenix/pwd/config.mk b/dmake/unix/xenix/pwd/config.mk
new file mode 100644
index 000000000000..095ff3587a68
--- /dev/null
+++ b/dmake/unix/xenix/pwd/config.mk
@@ -0,0 +1,23 @@
+# This is the Sys VR3 PWD configuration file. It configures SysvR3 unix
+# versions of dmake to use a provided version of getcwd rather than the
+# standard library version that uses popen to capture the output of pwd.
+#
+
+osredir := $(OS)$(DIRSEPSTR)$(OSRELEASE)$(DIRSEPSTR)$(OSENVIRONMENT)
+
+# The following are required sources
+OSRESRC := getcwd.c
+
+.IF $(OSRESRC)
+ SRC += $(OSRESRC)
+ .SETDIR=$(osredir) : $(OSRESRC)
+.END
+
+.SOURCE.h : $(osredir)
+
+# Local configuration modifications for CFLAGS, there's local SysV includes
+# too.
+CFLAGS += -I$(osredir)
+
+# Xenix needs -lx in order to link successfully.
+LDLIBS += -lx
diff --git a/dmake/unix/xenix/pwd/getcwd.c b/dmake/unix/xenix/pwd/getcwd.c
new file mode 100644
index 000000000000..f2359bcc795b
--- /dev/null
+++ b/dmake/unix/xenix/pwd/getcwd.c
@@ -0,0 +1,231 @@
+/*
+ getcwd -- get pathname of current working directory
+
+ public-domain implementation
+
+ last edit: 03-Nov-1990 Gwyn@BRL.MIL
+
+ complies with the following standards:
+ IEEE Std 1003.1-1988
+ SVID Issue 3
+ X/Open Portability Guide Issue 2 (when "XPG2" is defined)
+ X/Open Portability Guide Issue 3
+
+ This implementation of getcwd() can be used to replace the UNIX
+ System V library routine (which uses popen() to capture the output of
+ the "pwd" command). Once that is done, "pwd" can be reimplemented as
+ just puts(getcwd((char*)0,0)), assuming "XPG2" is defined below.
+
+ This implementation depends on every directory having entries for
+ "." and "..". It also depends on the internals of the <dirent.h>
+ data structures to some degree.
+
+ I considered using chdir() to ascend the hierarchy, followed by a
+ final chdir() to the path being returned by getcwd() to restore the
+ location, but decided that error recovery was too difficult that way.
+ The algorithm I settled on was inspired by my rewrite of the "pwd"
+ utility, combined with the dotdots[] array trick from the SVR2 shell.
+*/
+#define XPG2 /* define to support obsolete XPG2-mandated feature */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef M_XENIX
+# include <sys/ndir.h>
+# define dirent direct
+#else
+# include <dirent.h>
+#endif
+
+#include <errno.h>
+#include <string.h>
+
+typedef char *pointer; /* (void *) if you have it */
+
+extern void free();
+extern pointer malloc();
+extern int fstat(), stat();
+
+extern int errno; /* normally done by <errno.h> */
+
+#ifndef NULL
+#define NULL 0 /* amorphous null pointer constant */
+#endif
+
+#ifndef NAME_MAX
+#define NAME_MAX 255 /* maximum directory entry size */
+#endif
+
+
+char *
+getcwd( buf, size ) /* returns pointer to CWD pathname */
+ char *buf; /* where to put name (NULL to malloc) */
+ int size; /* size of buf[] or malloc()ed memory */
+ {
+ static char dotdots[] =
+"../../../../../../../../../../../../../../../../../../../../../../../../../..";
+ char *dotdot; /* -> dotdots[.], right to left */
+ DIR *dirp; /* -> parent directory stream */
+ struct dirent *dir; /* -> directory entry */
+ struct stat stat1,
+ stat2; /* info from stat() */
+ struct stat *d = &stat1; /* -> info about "." */
+ struct stat *dd = &stat2; /* -> info about ".." */
+ register char *buffer; /* local copy of buf, or malloc()ed */
+ char *bufend; /* -> buffer[size] */
+ register char *endp; /* -> end of reversed string */
+ register char *dname; /* entry name ("" for root) */
+ int serrno = errno; /* save entry errno */
+
+ if ( buf != NULL && size <= 0
+#ifndef XPG2
+ || buf == NULL
+#endif
+ ) {
+ errno = EINVAL; /* invalid argument */
+ return NULL;
+ }
+
+ buffer = buf;
+#ifdef XPG2
+ if ( buf == NULL /* wants us to malloc() the string */
+ && (buffer = (char *) malloc( (unsigned) size )) == NULL
+ /* XXX -- actually should probably not pay attention to "size" arg */
+ ) {
+ errno = ENOMEM; /* cannot malloc() specified size */
+ return NULL;
+ }
+#endif
+
+ if ( stat( ".", dd ) != 0 ) /* prime the pump */
+ goto error; /* errno already set */
+
+ endp = buffer; /* initially, empty string */
+ bufend = &buffer[size];
+
+ for ( dotdot = &dotdots[sizeof dotdots]; dotdot != dotdots; )
+ {
+ dotdot -= 3; /* include one more "/.." section */
+ /* (first time is actually "..") */
+
+ /* swap stat() info buffers */
+ {
+ register struct stat *temp = d;
+
+ d = dd; /* new current dir is old parent dir */
+ dd = temp;
+ }
+
+ if ( (dirp = opendir( dotdot )) == NULL ) /* new parent */
+ goto error; /* errno already set */
+
+ if ( fstat( dirp->dd_fd, dd ) != 0 )
+ {
+ serrno = errno; /* set by fstat() */
+ (void)closedir( dirp );
+ errno = serrno; /* in case closedir() clobbered it */
+ goto error;
+ }
+
+ if ( d->st_dev == dd->st_dev )
+ { /* not crossing a mount point */
+ if ( d->st_ino == dd->st_ino )
+ { /* root directory */
+ dname = "";
+ goto append;
+ }
+
+ do
+ if ( (dir = readdir( dirp )) == NULL )
+ {
+ (void)closedir( dirp );
+ errno = ENOENT; /* missing entry */
+ goto error;
+ }
+ while ( dir->d_ino != d->st_ino );
+ }
+ else { /* crossing a mount point */
+ struct stat t; /* info re. test entry */
+ char name[sizeof dotdots + 1 + NAME_MAX];
+
+ (void)strcpy( name, dotdot );
+ dname = &name[strlen( name )];
+ *dname++ = '/';
+
+ do {
+ if ( (dir = readdir( dirp )) == NULL )
+ {
+ (void)closedir( dirp );
+ errno = ENOENT; /* missing entry */
+ goto error;
+ }
+
+ (void)strcpy( dname, dir->d_name );
+ /* must fit if NAME_MAX is not a lie */
+ }
+ while ( stat( name, &t ) != 0
+ || t.st_ino != d->st_ino
+ || t.st_dev != d->st_dev
+ );
+ }
+
+ dname = dir->d_name;
+
+ /* append "/" and reversed dname string onto buffer */
+ append:
+ if ( endp != buffer /* avoid trailing / in final name */
+ || dname[0] == '\0' /* but allow "/" when CWD is root */
+ )
+ *endp++ = '/';
+
+ {
+ register char *app; /* traverses dname string */
+
+ for ( app = dname; *app != '\0'; ++app )
+ ;
+
+ if ( app - dname >= bufend - endp )
+ {
+ (void)closedir( dirp );
+ errno = ERANGE; /* won't fit allotted space */
+ goto error;
+ }
+
+ while ( app != dname )
+ *endp++ = *--app;
+ }
+
+ (void)closedir( dirp );
+
+ if ( dname[0] == '\0' ) /* reached root; wrap it up */
+ {
+ register char *startp; /* -> buffer[.] */
+
+ *endp = '\0'; /* plant null terminator */
+
+ /* straighten out reversed pathname string */
+ for ( startp = buffer; --endp > startp; ++startp )
+ {
+ char temp = *endp;
+
+ *endp = *startp;
+ *startp = temp;
+ }
+
+ errno = serrno; /* restore entry errno */
+ /* XXX -- if buf==NULL, realloc here? */
+ return buffer;
+ }
+ }
+
+ errno = ENOMEM; /* actually, algorithm failure */
+
+ error:
+ if ( buf == NULL )
+ free( (pointer)buffer );
+
+ return NULL;
+ }
+
diff --git a/dmake/unix/xenix/pwd/make.sh b/dmake/unix/xenix/pwd/make.sh
new file mode 100644
index 000000000000..e7c02e53ace6
--- /dev/null
+++ b/dmake/unix/xenix/pwd/make.sh
@@ -0,0 +1,62 @@
+mkdir objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O infer.c
+mv infer.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O make.c
+mv make.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O stat.c
+mv stat.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O expand.c
+mv expand.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O dmstring.c
+mv dmstring.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O hash.c
+mv hash.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O dag.c
+mv dag.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O dmake.c
+mv dmake.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O path.c
+mv path.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O imacs.c
+mv imacs.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O sysintf.c
+mv sysintf.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O parse.c
+mv parse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O getinp.c
+mv getinp.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O quit.c
+mv quit.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O state.c
+mv state.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O dmdump.c
+mv dmdump.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O macparse.c
+mv macparse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O rulparse.c
+mv rulparse.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O percent.c
+mv percent.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O function.c
+mv function.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/arlib.c
+mv arlib.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/dirbrk.c
+mv dirbrk.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/rmprq.c
+mv rmprq.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/ruletab.c
+mv ruletab.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/runargv.c
+mv runargv.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/dcache.c
+mv dcache.o objects
+cc -c -I. -Iunix -Iunix/xenix -DM_XENIX -Iunix/xenix/pwd -O unix/xenix/pwd/getcwd.c
+mv getcwd.o objects
+cc -O -o dmake objects/infer.o objects/make.o objects/stat.o objects/expand.o \
+objects/dmstring.o objects/hash.o objects/dag.o objects/dmake.o objects/path.o \
+objects/imacs.o objects/sysintf.o objects/parse.o objects/getinp.o \
+objects/quit.o objects/state.o objects/dmdump.o objects/macparse.o \
+objects/rulparse.o objects/percent.o objects/function.o objects/arlib.o \
+objects/dirbrk.o objects/rmprq.o objects/ruletab.o objects/runargv.o objects/dcache.o objects/getcwd.o -lx
+cp unix/xenix/pwd/template.mk startup/config.mk
diff --git a/dmake/unix/xenix/pwd/public.h b/dmake/unix/xenix/pwd/public.h
new file mode 100644
index 000000000000..593e2956b3e1
--- /dev/null
+++ b/dmake/unix/xenix/pwd/public.h
@@ -0,0 +1,167 @@
+/* RCS $Id: public.h,v 1.9 2007-10-15 15:57:43 ihi Exp $
+-- WARNING -- This file is AUTOMATICALLY GENERATED DO NOT EDIT IT
+--
+--
+-- SYNOPSIS
+-- Local functions exported to be visible by others.
+--
+-- DESCRIPTION
+-- This file is generated by 'genpub'. Function declarations
+-- that appear in this file are extracted by 'genpub' from
+-- source files. Any function in the source file whose definition
+-- appears like:
+--
+-- PUBLIC return_type
+-- function( arg_list );
+-- type_expr1 arg1;
+-- ...
+--
+-- has its definition extracted and a line of the form:
+--
+-- return_type function ANSI((type_expr1,type_expr2,...));
+--
+-- entered into the output file.
+--
+-- AUTHOR
+-- Dennis Vadura, dvadura@dmake.wticorp.com
+--
+-- WWW
+-- http://dmake.wticorp.com/
+--
+-- COPYRIGHT
+-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved.
+--
+-- This program is NOT free software; you can redistribute it and/or
+-- modify it under the terms of the Software License Agreement Provided
+-- in the file <distribution-root>/readme/license.txt.
+--
+-- LOG
+-- Use cvs log to obtain detailed change logs.
+*/
+
+#ifndef _DMAKE_PUBLIC_h
+#define _DMAKE_PUBLIC_h
+
+#ifdef EXTERN
+#undef EXTERN
+#endif
+#if defined(DEFINE_DMAKE_VARIABLES)
+#define EXTERN
+#else
+#define EXTERN extern
+#endif
+
+/***** genpub: Begin list of generated function headers */
+void Infer_recipe ANSI((CELLPTR, CELLPTR));
+int Make_targets ANSI(());
+int Make ANSI((CELLPTR, CELLPTR));
+int Exec_commands ANSI((CELLPTR));
+void Print_cmnd ANSI((char *, int, int));
+int Push_dir ANSI((char *, char *, int));
+void Pop_dir ANSI((int));
+void Append_line ANSI((char *, int, FILE *, char *, int, int));
+void Stat_target ANSI((CELLPTR, int, int));
+char *Expand ANSI((char *));
+char *Apply_edit ANSI((char *, char *, char *, int, int));
+void Map_esc ANSI((char *));
+char* Apply_modifiers ANSI((int, char *));
+char* Tokenize ANSI((char *, char *, char, int));
+char* ScanToken ANSI((char *, char **, int));
+char *DmStrJoin ANSI((char *, char *, int, int));
+char *DmStrAdd ANSI((char *, char *, int));
+char *DmStrApp ANSI((char *, char *));
+char *DmStrDup ANSI((char *));
+char *DmStrDup2 ANSI((char *));
+char *DmStrPbrk ANSI((char *, char *));
+char *DmStrSpn ANSI((char *, char *));
+char *DmStrStr ANSI((char *, char *));
+char *DmSubStr ANSI((char *, char *));
+uint16 Hash ANSI((char *, uint32 *));
+HASHPTR Get_name ANSI((char *, HASHPTR *, int));
+HASHPTR Search_table ANSI((HASHPTR *, char *, uint16 *, uint32 *));
+HASHPTR Push_macro ANSI((HASHPTR));
+HASHPTR Pop_macro ANSI((HASHPTR));
+HASHPTR Def_macro ANSI((char *, char *, int));
+CELLPTR Def_cell ANSI((char *));
+LINKPTR Add_prerequisite ANSI((CELLPTR, CELLPTR, int, int));
+void Clear_prerequisites ANSI((CELLPTR));
+int Test_circle ANSI((CELLPTR, int));
+STRINGPTR Def_recipe ANSI((char *, STRINGPTR, int, int));
+t_attr Rcp_attribute ANSI((char *));
+int main ANSI((int, char **));
+FILE *Openfile ANSI((char *, int, int));
+FILE *Closefile ANSI(());
+FILE *Search_file ANSI((char *, char **));
+char *Filename ANSI(());
+int Nestlevel ANSI(());
+FILE *TryFiles ANSI((LINKPTR));
+void Fatal ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void Error ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void Warning ANSI((ARG (char *,fmt),ARG (va_alist_type, va_alist)));
+void No_ram ANSI(());
+void Usage ANSI((int));
+void Version ANSI(());
+char *Get_suffix ANSI((char *));
+char *Basename ANSI((char *));
+char *Filedir ANSI((char *));
+char *Build_path ANSI((char *, char *));
+void Make_rules ANSI(());
+void Create_macro_vars ANSI(());
+time_t Do_stat ANSI((char *, char *, char **, int));
+int Do_touch ANSI((char *, char *, char **));
+void Void_lib_cache ANSI((char *, char *));
+time_t Do_time ANSI(());
+void Do_profile_output ANSI((char *, uint16, CELLPTR));
+int Do_cmnd ANSI((char **, int, int, CELLPTR, t_attr, int));
+char ** Pack_argv ANSI((int, int, char **));
+char *Read_env_string ANSI((char *));
+int Write_env_string ANSI((char *, char *));
+void ReadEnvironment ANSI(());
+void Catch_signals ANSI((void (*)(int)));
+void Clear_signals ANSI(());
+void Prolog ANSI((int, char* []));
+void Epilog ANSI((int));
+char *Get_current_dir ANSI(());
+int Set_dir ANSI((char*));
+char Get_switch_char ANSI(());
+FILE* Get_temp ANSI((char **, char *));
+FILE *Start_temp ANSI((char *, CELLPTR, char **));
+void Open_temp_error ANSI((char *, char *));
+void Link_temp ANSI((CELLPTR, FILE *, char *));
+void Close_temp ANSI((CELLPTR, FILE *));
+void Unlink_temp_files ANSI((CELLPTR));
+void Handle_result ANSI((int, int, int, CELLPTR));
+void Update_time_stamp ANSI((CELLPTR));
+int Remove_file ANSI((char *));
+void Parse ANSI((FILE *));
+int Get_line ANSI((char *, FILE *));
+char *Do_comment ANSI((char *, char **, int));
+char *Get_token ANSI((TKSTRPTR, char *, int));
+void Quit ANSI((int));
+void Read_state ANSI(());
+void Write_state ANSI(());
+int Check_state ANSI((CELLPTR, STRINGPTR *, int));
+void Dump ANSI(());
+void Dump_recipe ANSI((STRINGPTR));
+int Parse_macro ANSI((char *, int));
+int Macro_op ANSI((char *));
+int Parse_rule_def ANSI((int *));
+int Rule_op ANSI((char *));
+void Add_recipe_to_list ANSI((char *, int, int));
+void Bind_rules_to_targets ANSI((int));
+int Set_group_attributes ANSI((char *));
+DFALINKPTR Match_dfa ANSI((char *));
+void Check_circle_dfa ANSI(());
+void Add_nfa ANSI((char *));
+char *Exec_function ANSI((char *));
+time_t seek_arch ANSI((char *, char *));
+int touch_arch ANSI(( char *, char *));
+void void_lcache ANSI(( char *, char *));
+int If_root_path ANSI((char *));
+void Remove_prq ANSI((CELLPTR));
+int runargv ANSI((CELLPTR, int, int, t_attr, char **));
+int Wait_for_child ANSI((int, int));
+void Clean_up_processes ANSI(());
+time_t CacheStat ANSI((char *, int));
+
+#endif
diff --git a/dmake/unix/xenix/pwd/template.mk b/dmake/unix/xenix/pwd/template.mk
new file mode 100644
index 000000000000..abd4066c347b
--- /dev/null
+++ b/dmake/unix/xenix/pwd/template.mk
@@ -0,0 +1,7 @@
+# ** Default build configuration for dmake.
+# ** DO NOT PLACE LOCAL DEFINITIONS INTO THIS FILE IT IS AUTO GENERATED
+# ** USE "startup/local.mk" for those.
+
+ OS *:= unix
+ OSRELEASE *:= xenix
+ OSENVIRONMENT *:= pwd
diff --git a/dmake/unix/xenix/stdlib.h b/dmake/unix/xenix/stdlib.h
new file mode 100644
index 000000000000..fe814c798a0b
--- /dev/null
+++ b/dmake/unix/xenix/stdlib.h
@@ -0,0 +1,50 @@
+/* RCS $Id: stdlib.h,v 1.1.1.1 2000-09-22 15:33:36 hr Exp $
+--
+-- SYNOPSIS
+-- stdlib interface
+--
+-- DESCRIPTION
+-- Specially needed pieces of interface to the standard C lib.
+--
+-- AUTHOR
+-- Dennis Vadura, dvadura@dmake.wticorp.com
+--
+-- WWW
+-- http://dmake.wticorp.com/
+--
+-- COPYRIGHT
+-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved.
+--
+-- This program is NOT free software; you can redistribute it and/or
+-- modify it under the terms of the Software License Agreement Provided
+-- in the file <distribution-root>/readme/license.txt.
+--
+-- LOG
+-- Use cvs log to obtain detailed change logs.
+*/
+
+
+#ifndef _STDLIB_INCLUDED_
+#define _STDLIB_INCLUDED_
+
+extern /*GOTO*/ _exit();
+extern /*GOTO*/ exit();
+extern /*GOTO*/ abort();
+extern int system();
+extern char *getenv();
+extern char *calloc();
+extern char *malloc();
+extern char *realloc();
+
+#ifndef _AIX
+/* The AIX compiler dies on illegal redefinition of free */
+extern free();
+#endif
+
+extern int errno;
+
+#ifndef EIO
+# include <errno.h>
+#endif
+
+#endif /* _STDLIB_INCLUDED_ */
diff --git a/dmake/unix/xenix/template.mk b/dmake/unix/xenix/template.mk
new file mode 100644
index 000000000000..7ab223fbdb9f
--- /dev/null
+++ b/dmake/unix/xenix/template.mk
@@ -0,0 +1,7 @@
+# ** Default build configuration for dmake.
+# ** DO NOT PLACE LOCAL DEFINITIONS INTO THIS FILE IT IS AUTO GENERATED
+# ** USE "startup/local.mk" for those.
+
+ OS *:= unix
+ OSRELEASE *:= xenix
+ OSENVIRONMENT *:=
diff --git a/dmake/unix/xenix/time.h b/dmake/unix/xenix/time.h
new file mode 100644
index 000000000000..c7102cfc18cb
--- /dev/null
+++ b/dmake/unix/xenix/time.h
@@ -0,0 +1,32 @@
+/* RCS $Id: time.h,v 1.1.1.1 2000-09-22 15:33:36 hr Exp $
+--
+-- SYNOPSIS
+-- time_t
+--
+-- DESCRIPTION
+-- Properly define time_t.
+--
+-- AUTHOR
+-- Dennis Vadura, dvadura@dmake.wticorp.com
+--
+-- WWW
+-- http://dmake.wticorp.com/
+--
+-- COPYRIGHT
+-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved.
+--
+-- This program is NOT free software; you can redistribute it and/or
+-- modify it under the terms of the Software License Agreement Provided
+-- in the file <distribution-root>/readme/license.txt.
+--
+-- LOG
+-- Use cvs log to obtain detailed change logs.
+*/
+
+#ifndef TIME_h
+#define TIME_h
+
+typedef long time_t; /* this is the thing we use */
+
+#endif TIME_h
+