Path: utzoo!mnetor!tmsoft!torsqnt!jarvis.csri.toronto.edu!rutgers!ucsd!tut.cis.ohio-state.edu!CSE.OGC.EDU!marta From: marta@CSE.OGC.EDU (Marta Kallstrom) Newsgroups: gnu.utils.bug Subject: make-3.56 alterations Message-ID: <8911180119.AA18635@cse.ogc.edu> Date: 18 Nov 89 01:19:14 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 60 I have finished porting make-3.56 to the Cogent Research XTM -- a distributed parallel system with a UNIX-like OS, based on a Linda communication mechanism. This is our first upgrade since 3.27, which we are shipping with our system. Incidentally, we are very happy with your software! I found two problems in 3.56, which I hope have been fixed in later versions, but in case they haven't, I'll explain them. (I did not run a "diff" on our files since we differ in more areas than those I am going to mention.) 1. The archiver on the XTM is not compatible with UNIX ar, so I defined NO_ARCHIVES. In commands.c, set_file_variables(), I moved the #endif of the #ifndef NO_ARCHIVES above the "else". Otherwise, automatic variables "at" and "percent" are not initialized, thus disabling all other automatic variables except "star". (Actually, their value fields are full of garbage.) 2. I needed to reinstate return values for three functions: execute_file_commands(), notice_finished_file(), and remake_file(). Without these return values, if job_slots > 1 (which it often is on our parallel system), execute_file_commands() no longer differentitates between targets whose jobs are finished and those whose jobs are still running. When execute_file_commands() returns to remake_file(), the latter routine assumes that all jobs for the target are finished and sets the file's command_state to cs_finished, but the file's update_status may not be set, so an error results. The changes I made are: commands.c: execute_file_commands(): return integer status return 0 on command_state == cs_running return file->update_status on command_state == cs_finished return 0 on *p == '\0' return notice_finished_file(file) on if (status) and and on else if (job_slots == 1) return 0 at end of function remake.c notice_finished_file(): return integer status return file->update_status at end of function remake_file(): return integer status status = execute_file_commands(file) if (file->command_state == cs_finished) { file->update_status = status; return notice_finished_file(file); }else return 0; update_file_1(): (no change in declaration) file->update_status = remake_file(file) I hope you can make use of this. Marta Kallstrom Software Engineer Cogent Research, Inc. marta@cse.ogc.edu