]> git.sur5r.net Git - cc65/commitdiff
Make the spawn module an include file as suggested by Greg King
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Nov 2002 21:12:00 +0000 (21:12 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Nov 2002 21:12:00 +0000 (21:12 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1649 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cl65/main.c
src/cl65/make/gcc.mak
src/cl65/spawn-amiga.c [deleted file]
src/cl65/spawn-amiga.inc [new file with mode: 0644]
src/cl65/spawn-unix.c [deleted file]
src/cl65/spawn-unix.inc [new file with mode: 0644]

index 3372850cba42c1f6d51653d19d7728f62965e3b2..bf7b8dcebc7dd0a371610b5562579de5862f96e7 100644 (file)
 
 
 
+/* Check out if we have a spawn() function on the system, or if we must use
+ * our own.
+ */
+#if defined(__WATCOMC__) || defined(_MSC_VER) || defined(__MINGW32__) || defined(__DJGPP__)
+#  define HAVE_SPAWN    1
+#else
+#  define NEED_SPAWN   1
+#endif
+
+
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include <errno.h>
-#if defined(__WATCOMC__) || defined(_MSC_VER) || defined(__MINGW32__)
-#  include <process.h>         /* DOS, OS/2 and Windows */
-#else
-#  include "spawn.h"           /* All others */
+#ifdef HAVE_SPAWN
+#  include <process.h>
 #endif
 
 /* common */
+#include "attrib.h"
 #include "cmdline.h"
 #include "fname.h"
+#include "strbuf.h"
 #include "target.h"
 #include "version.h"
 #include "xmalloc.h"
@@ -124,7 +135,25 @@ static char* TargetLib     = 0;
 
 
 /*****************************************************************************/
-/*                          Determine a file type                           */
+/*                Include the system specific spawn function                 */
+/*****************************************************************************/
+
+
+
+#if defined(NEED_SPAWN)
+#  if defined(SPAWN_UNIX)
+#    include "spawn-unix.inc"
+#  elif defined(SPAWN_AMIGA)
+#    include "spawn-amiga.inc"
+#  else
+#    error "Don't know which spawn module to include!"
+#  endif
+#endif
+
+
+
+/*****************************************************************************/
+/*                          Determine a file type                           */
 /*****************************************************************************/
 
 
index 96f9a2b912174f4dc4bfc253c84f46a136c28ffd..87153f7cb029d26dae15ffeb5548031c93fffc5a 100644 (file)
@@ -5,15 +5,18 @@
 # Library dir
 COMMON = ../common
 
+# Type of spawn function to use
+SPAWN   = SPAWN_UNIX
+
+
 CC=gcc
-CFLAGS = -O2 -g -Wall -W -I$(COMMON)
+CFLAGS = -O2 -g -Wall -W -I$(COMMON) -D$(SPAWN)
 EBIND  = emxbind
 LDFLAGS=
 
 OBJS = error.o         \
        global.o        \
-       main.o          \
-       spawn-unix.o
+       main.o
 
 LIBS = $(COMMON)/common.a
 
@@ -31,7 +34,7 @@ endif
 
 
 cl65:  $(OBJS) $(LIBS)
-       $(CC) $(LDFLAGS) -o cl65 $(CFLAGS) $(OBJS) $(LIBS)
+       $(CC) $(LDFLAGS) -o cl65 $(OBJS) $(LIBS)
        @if [ $(OS2_SHELL) ] ;  then $(EBIND) cl65 ; fi
 
 clean:
@@ -47,7 +50,7 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) -I$(COMMON) -D$(SPAWN) -MM $^ > .depend
 
 
 
diff --git a/src/cl65/spawn-amiga.c b/src/cl65/spawn-amiga.c
deleted file mode 100644 (file)
index 8a083f7..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 spawn-amiga.c                             */
-/*                                                                           */
-/*                Execute other external programs (Amiga version)            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002     Wolfgang Hosemann                                            */
-/* EMail:       whose@t-online.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <clib/dos_protos.h>
-
-/* common */
-#include "attrib.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                  Code                                    */
-/*****************************************************************************/
-
-
-
-int spawnvp (int Mode attribute ((unused)),
-             const char* File attribute ((unused)),
-             char* const argv [])
-/* Execute the given program searching and wait til it terminates. The Mode
- * argument is ignored (compatibility only). The result of the function is
- * the return code of the program. The function will terminate the program
- * on errors.
- */
-{
-    int Status;
-    StrBuf Command = AUTO_STRBUF_INITIALIZER;
-
-    /* Build the command line */
-    while (*argv) {
-        SB_AppendStr (&Command, *argv++);
-        SB_AppendChar (&Command, ' ');
-    }
-
-    /* Terminate the command line */
-    SB_Terminate (&Command);
-
-    /* Invoke the shell to execute the command */
-    Status = System (SB_GetConstBuf (&Command), TAG_END)
-
-    /* Free the string buf data */
-    DoneStrBuf (&Command);
-
-    /* Return the result */
-    return Status;
-}
-
-
-
diff --git a/src/cl65/spawn-amiga.inc b/src/cl65/spawn-amiga.inc
new file mode 100644 (file)
index 0000000..4f0565c
--- /dev/null
@@ -0,0 +1,77 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                spawn-amiga.inc                            */
+/*                                                                           */
+/*                Execute other external programs (Amiga version)            */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2002     Wolfgang Hosemann                                            */
+/* EMail:       whose@t-online.de                                            */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#include <stdio.h>
+#include <clib/dos_protos.h>
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+int spawnvp (int Mode attribute ((unused)),
+             const char* File attribute ((unused)),
+             char* const argv [])
+/* Execute the given program searching and wait til it terminates. The Mode
+ * argument is ignored (compatibility only). The result of the function is
+ * the return code of the program. The function will terminate the program
+ * on errors.
+ */
+{
+    int Status;
+    StrBuf Command = AUTO_STRBUF_INITIALIZER;
+
+    /* Build the command line */
+    while (*argv) {
+        SB_AppendStr (&Command, *argv++);
+        SB_AppendChar (&Command, ' ');
+    }
+
+    /* Terminate the command line */
+    SB_Terminate (&Command);
+
+    /* Invoke the shell to execute the command */
+    Status = System (SB_GetConstBuf (&Command), TAG_END)
+
+    /* Free the string buf data */
+    DoneStrBuf (&Command);
+
+    /* Return the result */
+    return Status;
+}
+
+
+
diff --git a/src/cl65/spawn-unix.c b/src/cl65/spawn-unix.c
deleted file mode 100644 (file)
index be25e66..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               spawn.c                                    */
-/*                                                                           */
-/*                Execute other external programs (Unix version)             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* common */
-#include "attrib.h"
-
-/* cl65 */
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                  Code                                    */
-/*****************************************************************************/
-
-
-
-int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv [])
-/* Execute the given program searching and wait til it terminates. The Mode
- * argument is ignored (compatibility only). The result of the function is
- * the return code of the program. The function will terminate the program
- * on errors.
- */
-{
-    int Status = 0;
-
-    /* Fork */
-    int pid = fork ();
-    if (pid < 0) {
-
-       /* Error forking */
-       Error ("Cannot fork: %s", strerror (errno));
-
-    } else if (pid == 0) {
-
-               /* The son - exec the program */
-       if (execvp (File, argv) < 0) {
-           Error ("Cannot exec `%s': %s", File, strerror (errno));
-       }
-
-    } else {
-
-       /* The father: Wait for the subprocess to terminate */
-       if (waitpid (pid, &Status, 0) < 0) {
-           Error ("Failure waiting for subprocess: %s", strerror (errno));
-       }
-
-       /* Examine the child status */
-       if (!WIFEXITED (Status)) {
-           Error ("Subprocess `%s' aborted by signal %d", File, WTERMSIG (Status));
-       }
-    }
-
-    /* Only the father goes here, we place a return here regardless of that
-     * to avoid compiler warnings.
-     */
-    return WEXITSTATUS (Status);
-}
-
-
-
diff --git a/src/cl65/spawn-unix.inc b/src/cl65/spawn-unix.inc
new file mode 100644 (file)
index 0000000..d64d85d
--- /dev/null
@@ -0,0 +1,108 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                              spawn-unix.inc                               */
+/*                                                                           */
+/*                Execute other external programs (Unix version)             */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 1999-2002 Ullrich von Bassewitz                                       */
+/*               Wacholderweg 14                                             */
+/*               D-70597 Stuttgart                                           */
+/* EMail:        uz@musoftware.de                                            */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+
+
+/*****************************************************************************/
+/*                                  Data                                    */
+/*****************************************************************************/
+
+
+
+/* Mode argument for spawn. This value is ignored by the function and only
+ * provided for DOS/Windows compatibility.
+ */
+#ifndef P_WAIT
+#define P_WAIT 0
+#endif
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv [])
+/* Execute the given program searching and wait til it terminates. The Mode
+ * argument is ignored (compatibility only). The result of the function is
+ * the return code of the program. The function will terminate the program
+ * on errors.
+ */
+{
+    int Status = 0;
+
+    /* Fork */
+    int pid = fork ();
+    if (pid < 0) {
+
+       /* Error forking */
+       Error ("Cannot fork: %s", strerror (errno));
+
+    } else if (pid == 0) {
+
+               /* The son - exec the program */
+       if (execvp (File, argv) < 0) {
+           Error ("Cannot exec `%s': %s", File, strerror (errno));
+       }
+
+    } else {
+
+       /* The father: Wait for the subprocess to terminate */
+       if (waitpid (pid, &Status, 0) < 0) {
+           Error ("Failure waiting for subprocess: %s", strerror (errno));
+       }
+
+       /* Examine the child status */
+       if (!WIFEXITED (Status)) {
+           Error ("Subprocess `%s' aborted by signal %d", File, WTERMSIG (Status));
+       }
+    }
+
+    /* Only the father goes here, we place a return here regardless of that
+     * to avoid compiler warnings.
+     */
+    return WEXITSTATUS (Status);
+}
+
+
+