2013/10/28 Marc Espie <es...@nerim.net>:
> Theo says "no need for reconfig, "make config" will do just fine.
>
> okays ?
>
>
> Index: config.h
> ===================================================================
> RCS file: /build/data/openbsd/cvs/src/usr.sbin/config/config.h,v
> retrieving revision 1.25
> diff -u -p -r1.25 config.h
> --- config.h    5 Dec 2012 23:20:26 -0000       1.25
> +++ config.h    28 Oct 2013 07:44:56 -0000
> @@ -339,6 +339,10 @@ void       defoption(const char *name);
>  int    devbase_has_instances(struct devbase *, int);
>  int    deva_has_instances(struct deva *, int);
>  void   setupdirs(void);
> +int    pflag;
> +char   *sflag;
> +char   *bflag;
> +char   *startdir;
>
>  /* mkheaders.c */
>  int    mkheaders(void);
> Index: main.c
> ===================================================================
> RCS file: /build/data/openbsd/cvs/src/usr.sbin/config/main.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 main.c
> --- main.c      22 Jun 2012 22:02:29 -0000      1.44
> +++ main.c      28 Oct 2013 07:47:13 -0000
> @@ -93,15 +93,24 @@ usage(void)
>         exit(1);
>  }
>
> +int pflag = 0;
> +char *sflag = NULL;
> +char *bflag = NULL;
> +char *startdir;
> +
>  int
>  main(int argc, char *argv[])
>  {
>         char *p;
>         const char *last_component;
>         char *outfile = NULL;
> -       int pflag, ch, eflag, uflag, fflag;
> +       int ch, eflag, uflag, fflag;
> +       char dirbuffer[PATH_MAX];
>
>         pflag = eflag = uflag = fflag = 0;
> +       startdir = getcwd(dirbuffer, sizeof dirbuffer);
> +       if (startdir == NULL)
> +               warn("Can't getcwd, no make reconfig");

"make config" here, too.

>         while ((ch = getopt(argc, argv, "egpfb:s:o:u")) != -1) {
>                 switch (ch) {
>
> @@ -148,10 +157,12 @@ main(int argc, char *argv[])
>                         break;
>
>                 case 'b':
> +                       bflag = optarg;
>                         builddir = optarg;
>                         break;
>
>                 case 's':
> +                       sflag = optarg;
>                         srcdir = optarg;
>                         break;
>
> Index: mkmakefile.c
> ===================================================================
> RCS file: /build/data/openbsd/cvs/src/usr.sbin/config/mkmakefile.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 mkmakefile.c
> --- mkmakefile.c        17 Sep 2012 17:36:13 -0000      1.37
> +++ mkmakefile.c        28 Oct 2013 17:57:38 -0000
> @@ -60,6 +60,7 @@
>  static const char *srcpath(struct files *);
>
>  static int emitdefs(FILE *);
> +static int emitreconfig(FILE *);
>  static int emitfiles(FILE *, int);
>
>  static int emitobjs(FILE *);
> @@ -120,6 +121,10 @@ mkmakefile(void)
>                 if ((*fn)(ofp))
>                         goto wrerror;
>         }
> +       if (startdir != NULL) {
> +               if (emitreconfig(ofp) != 0)
> +                       goto wrerror;
> +       }
>         if (ferror(ifp)) {
>                 (void)fprintf(stderr,
>                     "config: error reading %s (at line %d): %s\n",
> @@ -271,6 +276,33 @@ emitdefs(FILE *fp)
>         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
> +emitreconfig(FILE *fp)
> +{
> +       if (fputs("\n"
> +           ".PHONY: config\n"
> +           "config:\n", fp) < 0)
> +               return (1);
> +       if (fprintf(fp, "\tcd %s && config ", startdir) < 0)
> +               return (1);
> +       if (pflag) {
> +               if (fputs("-p ", fp) < 0)
> +                       return (1);
> +       }
> +       if (sflag) {
> +               if (fprintf(fp, "-s %s ", sflag) < 0)
> +                       return (1);
> +       }
> +       if (bflag) {
> +               if (fprintf(fp, "-b %s ", bflag) < 0)
> +                       return (1);
> +       }
> +       /* other options */
> +       if (fprintf(fp, "%s\n", conffile) < 0)
> +               return (1);
>         return (0);
>  }

Reads and runs fine here on i386. Handy, thanks.

--
  WBR,
  Vadim Zhukov

Reply via email to