Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/thorpej_scsipi]: src/usr.sbin/config Put both .S and .s files in SFILES....
details: https://anonhg.NetBSD.org/src/rev/77a34f6ca5b5
branches: thorpej_scsipi
changeset: 477384:77a34f6ca5b5
user: bjh21 <bjh21%NetBSD.org@localhost>
date: Wed Jan 31 00:15:41 2001 +0000
description:
Put both .S and .s files in SFILES. Fixes bin/12051. Patch from Richard
Earnshaw via Chris Gilbert.
The right solution here is to have every port use .S, but that might take a
while...
diffstat:
usr.sbin/config/mkmakefile.c | 503 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 503 insertions(+), 0 deletions(-)
diffs (truncated from 507 to 300 lines):
diff -r 43d2eb11aa21 -r 77a34f6ca5b5 usr.sbin/config/mkmakefile.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/config/mkmakefile.c Wed Jan 31 00:15:41 2001 +0000
@@ -0,0 +1,503 @@
+/* $NetBSD: mkmakefile.c,v 1.48.2.2 2001/01/31 00:15:41 bjh21 Exp $ */
+
+/*
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Lawrence Berkeley Laboratories.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * from: @(#)mkmakefile.c 8.1 (Berkeley) 6/6/93
+ */
+
+#include <sys/param.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "config.h"
+#include "sem.h"
+
+/*
+ * Make the Makefile.
+ */
+
+static const char *srcpath(struct files *);
+
+static const char *prefix_prologue(const char *);
+
+static int emitdefs(FILE *);
+static int emitfiles(FILE *, int, int);
+
+static int emitobjs(FILE *);
+static int emitcfiles(FILE *);
+static int emitsfiles(FILE *);
+static int emitrules(FILE *);
+static int emitload(FILE *);
+static int emitincludes(FILE *);
+
+int
+mkmakefile(void)
+{
+ FILE *ifp, *ofp;
+ int lineno;
+ int (*fn)(FILE *);
+ char *ifname;
+ char line[BUFSIZ], buf[200];
+
+ /* Try a makefile for the port first.
+ */
+ (void)sprintf(buf, "arch/%s/conf/Makefile.%s", machine, machine);
+ ifname = sourcepath(buf);
+ if ((ifp = fopen(ifname, "r")) == NULL) {
+ /* Try a makefile for the architecture second.
+ */
+ (void)sprintf(buf, "arch/%s/conf/Makefile.%s", machinearch,
+ machinearch);
+ ifname = sourcepath(buf);
+ }
+ if ((ifp = fopen(ifname, "r")) == NULL) {
+ (void)fprintf(stderr, "config: cannot read %s: %s\n",
+ ifname, strerror(errno));
+ free(ifname);
+ return (1);
+ }
+ if ((ofp = fopen("Makefile", "w")) == NULL) {
+ (void)fprintf(stderr, "config: cannot write Makefile: %s\n",
+ strerror(errno));
+ free(ifname);
+ return (1);
+ }
+ if (emitdefs(ofp) != 0)
+ goto wrerror;
+ lineno = 0;
+ while (fgets(line, sizeof(line), ifp) != NULL) {
+ lineno++;
+ if (line[0] != '%') {
+ if (fputs(line, ofp) < 0)
+ goto wrerror;
+ continue;
+ }
+ if (strcmp(line, "%OBJS\n") == 0)
+ fn = emitobjs;
+ else if (strcmp(line, "%CFILES\n") == 0)
+ fn = emitcfiles;
+ else if (strcmp(line, "%SFILES\n") == 0)
+ fn = emitsfiles;
+ else if (strcmp(line, "%RULES\n") == 0)
+ fn = emitrules;
+ else if (strcmp(line, "%LOAD\n") == 0)
+ fn = emitload;
+ else if (strcmp(line, "%INCLUDES\n") == 0)
+ fn = emitincludes;
+ else {
+ xerror(ifname, lineno,
+ "unknown %% construct ignored: %s", line);
+ continue;
+ }
+ if ((*fn)(ofp))
+ goto wrerror;
+ }
+ if (ferror(ifp)) {
+ (void)fprintf(stderr,
+ "config: error reading %s (at line %d): %s\n",
+ ifname, lineno, strerror(errno));
+ goto bad;
+ /* (void)unlink("Makefile"); */
+ free(ifname);
+ return (1);
+ }
+ if (fclose(ofp)) {
+ ofp = NULL;
+ goto wrerror;
+ }
+ (void)fclose(ifp);
+ free(ifname);
+ return (0);
+wrerror:
+ (void)fprintf(stderr, "config: error writing Makefile: %s\n",
+ strerror(errno));
+bad:
+ if (ofp != NULL)
+ (void)fclose(ofp);
+ /* (void)unlink("Makefile"); */
+ free(ifname);
+ return (1);
+}
+
+/*
+ * Return (possibly in a static buffer) the name of the `source' for a
+ * file. If we have `options source', or if the file is marked `always
+ * source', this is always the path from the `file' line; otherwise we
+ * get the .o from the obj-directory.
+ */
+static const char *
+srcpath(struct files *fi)
+{
+#if 1
+ /* Always have source, don't support object dirs for kernel builds. */
+ return (fi->fi_path);
+#else
+ static char buf[MAXPATHLEN];
+
+ if (have_source || (fi->fi_flags & FI_ALWAYSSRC) != 0)
+ return (fi->fi_path);
+ if (objpath == NULL) {
+ error("obj-directory not set");
+ return (NULL);
+ }
+ (void)snprintf(buf, sizeof buf, "%s/%s.o", objpath, fi->fi_base);
+ return (buf);
+#endif
+}
+
+static const char *
+prefix_prologue(const char *path)
+{
+
+ if (*path == '/')
+ return ("");
+ else
+ return ("$S/");
+}
+
+static int
+emitdefs(FILE *fp)
+{
+ struct nvlist *nv;
+ char *sp;
+
+ if (fputs("IDENT=", fp) < 0)
+ return (1);
+ sp = "";
+ for (nv = options; nv != NULL; nv = nv->nv_next) {
+
+ /* skip any options output to a header file */
+ if (DEFINED_OPTION(nv->nv_name))
+ continue;
+ if (fprintf(fp, "%s-D%s", sp, nv->nv_name) < 0)
+ return 1;
+ if (nv->nv_str)
+ if (fprintf(fp, "=\"%s\"", nv->nv_str) < 0)
+ return 1;
+ sp = " ";
+ }
+ if (putc('\n', fp) < 0)
+ return (1);
+ if (fprintf(fp, "PARAM=-DMAXUSERS=%d\n", maxusers) < 0)
+ return (1);
+ if (fprintf(fp, "TARGET_MACHINE=%s\n", machine) < 0)
+ return (1);
+ if (*srcdir == '/' || *srcdir == '.') {
+ if (fprintf(fp, "S=\t%s\n", srcdir) < 0)
+ return (1);
+ } else {
+ /*
+ * libkern and libcompat "Makefile.inc"s want relative S
+ * specification to begin with '.'.
+ */
+ if (fprintf(fp, "S=\t./%s\n", srcdir) < 0)
+ return (1);
+ }
+ for (nv = mkoptions; nv != NULL; nv = nv->nv_next)
+ if (fprintf(fp, "%s=%s\n", nv->nv_name, nv->nv_str) < 0)
+ return (1);
+ return (0);
+}
+
+static int
+emitobjs(FILE *fp)
+{
+ struct files *fi;
+ struct objects *oi;
+ int lpos, len, sp;
+
+ if (fputs("OBJS=", fp) < 0)
+ return (1);
+ sp = '\t';
+ lpos = 7;
+ for (fi = allfiles; fi != NULL; fi = fi->fi_next) {
+ if ((fi->fi_flags & FI_SEL) == 0)
+ continue;
+ len = strlen(fi->fi_base) + 2;
+ if (lpos + len > 72) {
+ if (fputs(" \\\n", fp) < 0)
+ return (1);
+ sp = '\t';
+ lpos = 7;
+ }
+ if (fprintf(fp, "%c%s.o", sp, fi->fi_base) < 0)
+ return (1);
+ lpos += len + 1;
+ sp = ' ';
+ }
+ for (oi = allobjects; oi != NULL; oi = oi->oi_next) {
+ if ((oi->oi_flags & OI_SEL) == 0)
+ continue;
+ len = strlen(oi->oi_path);
+ if (*oi->oi_path != '/') {
+ len += 3; /* "$S/" */
+ if (oi->oi_prefix != NULL)
+ len += strlen(oi->oi_prefix) + 1;
+ }
+ if (lpos + len > 72) {
+ if (fputs(" \\\n", fp) < 0)
+ return (1);
+ sp = '\t';
+ lpos = 7;
+ }
+ if (*oi->oi_path == '/') {
+ if (fprintf(fp, "%c%s", sp, oi->oi_path) < 0)
+ return (1);
+ } else {
+ if (oi->oi_prefix != NULL) {
+ if (fprintf(fp, "%c%s%s/%s", sp,
+ prefix_prologue(oi->oi_prefix),
+ oi->oi_prefix, oi->oi_path) < 0)
+ return (1);
+ } else {
+ if (fprintf(fp, "%c$S/%s", sp, oi->oi_path) < 0)
+ return (1);
+ }
Home |
Main Index |
Thread Index |
Old Index