Add "conditional appending makeoptions". Syntax is:
makeoptions selector FOO+=bar "selector" may be anything used as a key in the selecttab, i.e. an option, a "device" name, an "attach" name, a file system, etc. Semantics: FOO+=bar when the selector is set. For example, if you have: makeoptions pickle CPPFLAGS+=-I${S}/picklesrc then "options PICKLE" will cause "CPPFLAGS+=-I${S}/picklesrc" to be added to the Makefile. Suggested by Matt Thomas.
This commit is contained in:
parent
e33c2bb5d5
commit
2d9180a3cc
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: defs.h,v 1.17 2004/06/04 04:38:27 thorpej Exp $ */
|
||||
/* $NetBSD: defs.h,v 1.18 2004/06/04 07:28:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -360,6 +360,7 @@ struct nvlist *options; /* options */
|
|||
struct nvlist *fsoptions; /* filesystems */
|
||||
struct nvlist *mkoptions; /* makeoptions */
|
||||
struct nvlist *appmkoptions; /* appending mkoptions */
|
||||
struct hashtab *condmkopttab; /* conditional makeoption table */
|
||||
struct hashtab *devbasetab; /* devbase lookup */
|
||||
struct hashtab *devatab; /* devbase attachment lookup */
|
||||
struct hashtab *devitab; /* device instance lookup */
|
||||
|
@ -436,6 +437,7 @@ void addoption(const char *, const char *);
|
|||
void addfsoption(const char *);
|
||||
void addmkoption(const char *, const char *);
|
||||
void appendmkoption(const char *, const char *);
|
||||
void appendcondmkoption(const char *, const char *, const char *);
|
||||
void deffilesystem(const char *, struct nvlist *);
|
||||
void defoption(const char *, struct nvlist *, struct nvlist *);
|
||||
void defflag(const char *, struct nvlist *, struct nvlist *);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
%{
|
||||
/* $NetBSD: gram.y,v 1.49 2004/06/04 04:38:27 thorpej Exp $ */
|
||||
/* $NetBSD: gram.y,v 1.50 2004/06/04 07:28:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -480,7 +480,8 @@ mkopt_list:
|
|||
|
||||
mkoption:
|
||||
WORD '=' value { addmkoption($1, $3); } |
|
||||
WORD PLUSEQ value { appendmkoption($1, $3); };
|
||||
WORD PLUSEQ value { appendmkoption($1, $3); } |
|
||||
WORD WORD PLUSEQ value { appendcondmkoption($1, $2, $4); };
|
||||
|
||||
no_mkopt_list:
|
||||
no_mkopt_list ',' no_mkoption |
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: main.c,v 1.89 2004/06/04 04:38:27 thorpej Exp $ */
|
||||
/* $NetBSD: main.c,v 1.90 2004/06/04 07:28:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -251,6 +251,7 @@ main(int argc, char **argv)
|
|||
needcnttab = ht_new();
|
||||
opttab = ht_new();
|
||||
mkopttab = ht_new();
|
||||
condmkopttab = ht_new();
|
||||
fsopttab = ht_new();
|
||||
deffstab = ht_new();
|
||||
defopttab = ht_new();
|
||||
|
@ -900,6 +901,27 @@ appendmkoption(const char *name, const char *value)
|
|||
nextappmkopt = &nv->nv_next;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a conditional appending "make" option.
|
||||
*/
|
||||
void
|
||||
appendcondmkoption(const char *selname, const char *name, const char *value)
|
||||
{
|
||||
struct nvlist *nv, *lnv;
|
||||
const char *n;
|
||||
|
||||
n = strtolower(selname);
|
||||
nv = newnv(name, value, NULL, 0, NULL);
|
||||
if (ht_insert(condmkopttab, n, nv) == 0)
|
||||
return;
|
||||
|
||||
if ((lnv = ht_lookup(condmkopttab, n)) == NULL)
|
||||
panic("appendcondmkoption");
|
||||
for (; lnv->nv_next != NULL; lnv = lnv->nv_next)
|
||||
/* search for the last list element */;
|
||||
lnv->nv_next = nv;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a name=value pair to an option list. The value may be NULL.
|
||||
*/
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mkmakefile.c,v 1.60 2004/06/04 04:38:28 thorpej Exp $ */
|
||||
/* $NetBSD: mkmakefile.c,v 1.61 2004/06/04 07:28:26 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -515,6 +515,22 @@ emitincludes(FILE *fp)
|
|||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
print_condmkopts(const char *name, void *value, void *arg)
|
||||
{
|
||||
struct nvlist *nv;
|
||||
FILE *fp = arg;
|
||||
|
||||
if (ht_lookup(selecttab, name) == 0)
|
||||
return (0);
|
||||
|
||||
for (nv = value; nv != NULL; nv = nv->nv_next)
|
||||
if (fprintf(fp, "%s+=%s\n", nv->nv_name, nv->nv_str) < 0)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit appending makeoptions.
|
||||
*/
|
||||
|
@ -526,5 +542,6 @@ emitappmkoptions(FILE *fp)
|
|||
for (nv = appmkoptions; nv != NULL; nv = nv->nv_next)
|
||||
if (fprintf(fp, "%s+=%s\n", nv->nv_name, nv->nv_str) < 0)
|
||||
return (1);
|
||||
return (0);
|
||||
|
||||
return (ht_enumerate(condmkopttab, print_condmkopts, fp));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue