--- mk/base/tendra.install.mk.orig Wed Aug 27 09:00:00 2003 +++ mk/base/tendra.install.mk Thu Aug 28 21:14:55 2003 @@ -24,10 +24,6 @@ .if defined(API) INSTALL_TARGETS+= install-api -INSTALL_SUB+= lib/include/${API}.api lib/include/shared/${API}.api -.if defined(API_SUBDIR) -INSTALL_SUB+= ${API_SUBDIR:C/^/lib\/include\/${API}.api\//} -.endif .endif .if defined(INSTALL_ENV) @@ -102,27 +98,9 @@ # lib/apis: our api files. install-api: -.for i in ${API}.api shared/${API}.api - cd ${OBJ_PREFIX}/lib/apis/${i}; \ - for i in *.h; do \ - ${BIN_CP} ${OBJ_PREFIX}/lib/apis/${i}/$$i \ - ${INSTALL_PREFIX}/lib/include/${i}/$$i; \ - ${BIN_CHMOD} ${ARGS_CHMOD_DATA} \ - ${INSTALL_PREFIX}/lib/include/${i}/$$i; \ - done -.endfor -.if defined (API_SUBDIR) -.for i in ${API_SUBDIR} - cd ${.OBJDIR}.api/${i}; \ - for i in *.h; do \ - ${BIN_CP} ${.OBJDIR}.api/${i}/$$i \ - ${INSTALL_PREFIX}/lib/include/${API}.api/${i}/$$i; \ - ${BIN_CHMOD} ${ARGS_CHMOD_DATA} \ - ${INSTALL_PREFIX}/lib/include/${API}.api/${i}/$$i; \ - done -.endfor -.endif - + env MAKEOBJDIR=${OBJ_DIR}.api MKDIR="${BIN_MKDIR} ${ARGS_MKDIR}" \ + CP=${BIN_CP} CHMOD="${BIN_CHMOD} ${ARGS_CHMOD_DATA}" \ + INSTALL_PREFIX=${INSTALL_PREFIX} make install # lib/apis/lib lib/apis/lib/diag: our tl files. install-tl: --- src/tools/tspec/makefile.c.orig Mon Aug 25 09:01:13 2003 +++ src/tools/tspec/makefile.c Thu Aug 28 21:18:27 2003 @@ -71,10 +71,10 @@ */ static boolean -need_info(info *i, char *api) +need_info(info *i, char *api, boolean lax) { if (restrict_depth && !streq (api, i->api)) return (0); - return (i->implemented && i->tokens && i->src); + return (i->implemented && (lax || (i->tokens && i->src))); } @@ -95,6 +95,8 @@ char *api2 = hack_name (api, "_Aa0"); int li = output_incl_len; int ls = output_src_len; + hash_table *subdirs = make_hash_table("Subdirs"); + int i; /* Open output file */ nm = (whole ? MAKEFILE_API : MAKEFILE); @@ -135,11 +137,47 @@ } IGNORE fputs ("SHELL=/bin/sh\n\n", output); + /* Print all headers we want to install */ + IGNORE fprintf (output, "HEADERS="); + for (e = f ; e != null ; e = e->next) { + info *i = e->obj->u.u_info; + char *p; + object *o; + + if (!need_info(i, api, 1)) + continue; + + if (i->file == NULL || strstr(i->file, "dummy") != NULL || + i->api == NULL || strstr(i->api, "dummy") != NULL) + continue; + + IGNORE fprintf (output, "\\\n %s", i->incl + ls); + + buffer[0] = '\0'; + IGNORE strncat(buffer, i->incl + ls, buffsize); + if ((p = strrchr(buffer, '/')) != NULL) { + *p = '\0'; + /* Add the directory if it isn't in the subdirs hash table yet */ + if (search_hash(subdirs, buffer, 0) == NULL) { + p = xalloc(strlen(buffer) + 1); + IGNORE strcpy(p, buffer); + o = make_object(p, TYPE_VOID); + IGNORE add_hash(subdirs, o, 0); + } + } + } + + /* Print the list of subdirectories we have to create */ + IGNORE fputs ("\n\nDIRS=", output); + for (i = 0; i < sizeof (subdirs->array) / sizeof (*subdirs->array); i++) + for (e = subdirs->array[i]; e != null; e = e->next) + IGNORE fprintf (output, "\\\n %s", e->obj->name); + /* Print the list of files */ - IGNORE fputs ("JFILES=", output); + IGNORE fputs ("\n\nJFILES=", output); for (e = f ; e != null ; e = e->next) { info *i = e->obj->u.u_info; - if (need_info (i, api)) { + if (need_info (i, api, 0)) { int m; char *a = i->api; if (strneq (a, "shared/", 7)) a += 7; @@ -159,7 +197,7 @@ /* Print the construction for each file */ for (e = f ; e != null ; e = e->next) { info *i = e->obj->u.u_info; - if (need_info (i, api)) { + if (need_info (i, api, 0)) { int m; char *a = i->api; if (strneq (a, "shared/", 7)) a += 7; @@ -192,7 +230,17 @@ /* End of makefile */ IGNORE fputs ("clean :\n\trm -f ${JFILES}\n\n", output); - IGNORE fputs ("clobber : clean\n\trm -f ${LIB}\n", output); + IGNORE fputs ("clobber : clean\n\trm -f ${LIB}\n\n", output); + + IGNORE fprintf (output, "install : \n" + ".for i in ${DIRS}\n" + "\t${MKDIR} ${INSTALL_PREFIX}/lib/include/${i}\n" + ".endfor\n" + ".for i in ${HEADERS}\n" + "\t${CP} ../${i} ${INSTALL_PREFIX}/lib/include/${i:H}\n" + "\t${CP} ../${i} ${INSTALL_PREFIX}/lib/include/${i:H}\n" + ".endfor\n"); + IGNORE fclose (output); return; }