home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / PAMAKE18.ZIP / CHECK.C < prev    next >
C/C++ Source or Header  |  1988-12-05  |  3KB  |  108 lines

  1. /*************************************************************************
  2. |                                                                        |
  3. |   CHECK.C                                                     05.12.88 |
  4. |   PAMAKE Utility:  Check structures                                    |
  5. |                                                                        |
  6. *************************************************************************/
  7.  
  8. #ifdef VMS
  9. #include stdio
  10. #include "h.h"
  11. #else
  12. #include <stdio.h>
  13. #include "h.h"
  14. #endif
  15.  
  16. /*****  print out the structures as defined in memory */
  17. /*****  good for checking that your make file does    */
  18. /*****  what you want (and for debugging make).       */
  19.  
  20. void
  21. prt()
  22. {
  23.     register struct name *  np;
  24.     register struct depend *dp;
  25.     register struct line *  lp;
  26.     register struct cmd *   cp;
  27.     register struct macro * mp;
  28.  
  29.     for (mp = macrohead; mp; mp = mp->m_next)
  30.         fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
  31.  
  32.     fputc('\n', stderr);
  33.  
  34.     for (np = namehead.n_next; np; np = np->n_next)
  35.     {
  36.         if (np->n_flag & N_DOUBLE)
  37.             fprintf(stderr, "%s::\n", np->n_name);
  38.         else
  39.             fprintf(stderr, "%s:\n", np->n_name);
  40.         if (np == firstname)
  41.             fprintf(stderr, "(MAIN NAME)\n");
  42.         for (lp = np->n_line; lp; lp = lp->l_next)
  43.         {
  44.             fputc(':', stderr);
  45.             for (dp = lp->l_dep; dp; dp = dp->d_next)
  46.                 fprintf(stderr, " %s", dp->d_name->n_name);
  47.             fputc('\n', stderr);
  48.             for (cp = lp->l_cmd; cp; cp = cp->c_next)
  49.                 fprintf(stderr, "-\t%s\n", cp->c_cmd);
  50.             fputc('\n', stderr);
  51.         }
  52.         fputc('\n', stderr);
  53.     }
  54. }
  55.  
  56. /*****  recursive routine that does the actual checking */
  57.  
  58. void
  59. check(np)
  60. struct name *           np;
  61. {
  62.     register struct depend *dp;
  63.     register struct line *  lp;
  64.  
  65.  
  66.     if (np->n_flag & N_MARK)
  67.         fatal("Circular dependency found involving %s", np->n_name);
  68.  
  69.     np->n_flag |= N_MARK;
  70.  
  71.     for (lp = np->n_line; lp; lp = lp->l_next)
  72.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  73.             check(dp->d_name);
  74.  
  75.     np->n_flag &= ~N_MARK;
  76. }
  77.  
  78.  
  79. /*****  look for circular dependancies */
  80.  
  81. void
  82. circh()
  83. {
  84.     register struct name *  np;
  85.  
  86.     for (np = namehead.n_next; np; np = np->n_next)
  87.         check(np);
  88. }
  89.  
  90.  
  91. /***** check the target .PRECIOUS, and mark its dependents as precious */
  92.  
  93. void
  94. precious()
  95. {
  96.     register struct depend *        dp;
  97.     register struct line *          lp;
  98.     register struct name *          np;
  99.  
  100.  
  101.     if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
  102.         return;
  103.  
  104.     for (lp = np->n_line; lp; lp = lp->l_next)
  105.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  106.             dp->d_name->n_flag |= N_PREC;
  107. }
  108.