Short: GNU make including parallel compile Author: Roland McGrath Uploader: Steven Solie Type: dev/c Version: 3.81-1 Replaces: dev/c/make-ppc.lha Architecture: ppc-amigaos Distribution: Aminet SUMMARY ------- This is a self-contained port of GNU make for AmigaOS. For maximum compatibility two different executables are produced from the same sources: make and gmake. The make executable defaults to using AmigaShell to execute commands. This is the version to use for more Amiga-specific projects. The gmake executable defaults to using abc-shell to execute commands. This is the version to use for porting applications. Both executables behave more correctly and more consistently than previous make ports. POSIX compliance has been chosen over Amiga-only features. Be sure to review the NEWS file as well as the make 3.81 baseline has had many changes and old broken makefiles may no longer work. PARALLEL MAKE ------------- Parallel execution is supported via the -j or --jobs option. There is no limit on the number of parallel processes. Please review the following short article before jumping to any conclusions about parallel make being "broken": http://developers.sun.com/solaris/articles/parallel_make.html DEBUGGING --------- As a special debugging feature the --debug=j option will not delete any temporary files. This is very helpful when you are trying to determine if GNU make or abc-shell or the command itself is at fault. SHELL ----- You may choose which shell to execute a command with using the SHELL make variable as documented in the GNU make manual. Note the shell path is always a POSIX-style path. HISTORY ------- 3.81-1 - merged with final 3.81 make sources - updated AmigaOS file copyright notices - disabled DOS requesters - changed default variables: CC, C++, CXX, CXXLD, LEX to standard SDK tools (thanks Henning Nielsen Lund) 3.81rc2-6 - fixed readme typo (thanks David Rey) - fixed error stream synchronization issue (thanks Thomas Hoffmann) 3.81rc2-5 - compiled with SDK 51.22 - updated to clib2 1.200 - stderr stream is utilized again when executing commands (thanks Thomas Hoffmann) 3.81rc2-4 - fixed make path conversion in AmigaShell version which makes it possible to specify make's file path - updated copyright banners in Amiga-specific files - re-implemented the '@@' token in the AmigaShell version which enables you to execute multi-line commands, e.g. if exists make @@ list make @@ endif 3.81rc2-3 - recomplied with beta SDK 51.20 - fixed bug which was not translating make's path correctly which broke the "cd dir && make" idiom 3.81rc2-2 - removed child process limit by switching to using death notification messages - fixed a memory leak in amiga_execvp - further improved error handling 3.81rc2-1 - merged with official 3.81rc2 code base - removes backslash newlines when executing commands with AmigaShell (POSIX requirement) - now uses ProcessScan() for breaking child processes 3.81beta4-3 - compiled with clib2 1.199 - fixed bug which was stripping double-quotes in shell commands, they are not supposed to be stripped away (bug introduced in 3.81beta3-1) - fixed problem with deleting files during the child process exit routine; now done by the parent process instead 3.81beta4-2 - compiled with beta SDK 51.17 - added UNUSED definition check to make.h - split into two executables: make (AmigaShell default) and gmake (abc-shell default) - removed AmigaShell support from gmake 3.81beta4-1 - merged with official 3.81beta4 code base - now filters out env vars containing ".cfg" sub-string - changed wait() to avoid infinite looping - compiled with GCC 4.0.2 and clib2 1.198 - removed job launch delay - now uses new dos.library features to eliminate spawning extra processes and environment fiddling - return code is now left untouched; this may break some Amiga-only makefiles but it will ensure correct behaviour for all UN*X makefiles so I think it is worth it - fixed Makefile.AmigaOS to enable parallel make - added automatic dependency generation to Makefile.AmigaOS - added archive support (e.g. foolib(hack.o)) - requires at least AmigaOS 4.0 update 4 to work correctly 3.81beta3-2 - added code to open CONSOLE: when executing commands which fixes problems with ctrl-c breaking (thanks Jeff Gilpin) - fixed problem with wait() returning SIGINT which caused problems cleaning up during parallel make - added back in special handling of targets so that it is possible to have Amiga-style paths in target names as may be output by the gcc tools (thanks Andy Broad) - now names SystemTags() process as make.executor - added debug feature to keep temp files if level is 'j' - fixed possible memory leak in function execution - updated to use clib2 from CVS dated 2005-10-26 3.81beta3-1 - merged with official 3.81beta3 code base - re-applied .ALIAS patch under conditional compile which is only required for compiling AWeb - added parallel execution (-j) support - fixed ctrl-c interrupt support - BSD style error code (1) is passed through untouched (thanks Alan Broad) - removed support for the MAKESHELL variable (obsolete) - added support for the SHELL variable (thanks Alan Broad) - set SHELL to the shell to use to execute commands - note SHELL is never set from the environment (see make docs) - don't set SHELL or set SHELL to nothing to use AmigaShell - if you use a path for SHELL it must be a Un*x-style path - when SHELL is defined the backslash-newline-tab sequence is handled according to POSIX - MAKE & MAKE_COMMAND is set to a Un*x-style path and converted to an Amiga-style path at execution time when required (thanks Alan Broad) - don't forget to escape your quotes with backslash or make will parse them away now - added slight delay when launching parallel jobs to help avoid flooding the system - compiled with clib2 1.196 - added version suffix to help with package labelling - added SIGINT handler - now filters out env vars containing ".prefs" sub-string 27/09/2005 - added variable export support - command environment is now properly controlled which may slow down execution - removed broken MAKELEVEL global environment variable setting; let me know if it breaks anything - added MAKESHELL support so the user can choose which shell will be used to execute commands - leave MAKESHELL unset to use the default AmigaOS shell - set MAKESHELL to SDK:Local/C/sh to use bourne shell - fixed the $(shell) function to have consistent behaviour - updated to clib2 1.195 + tmpnam fix - compiled with SDK 51.15 - filters out env vars that are not plain ASCII 17/07/2005 - adjusted config.amigaos file for newest clib2 - merged in .ALIAS support for compiling AWeb - enabled floating point support - added help target with target explanations 19/02/2005 - fixed char eating bug reported by Steen Lund Nielsen fixed more pathing issues executes each shell command one at a time now added more memory allocation failure checks default paths were not set correctly command path is converted to AmigaOS path before execution adjusted AmigaOS makefiles to use UNIX paths 11/02/2005 - removed the AmigaOS enhancements moved to UNIX paths 06/02/2005 - applied env import fix from Sebastian Bauer 05/02/2005 - fixed removal of temporary files fixed another bug in $(shell) function 03/02/2005 - fixed crashing with wrong $(shell) command improved memory handling removed debug code during compile increased size of internal buffers updated config.h to use new clib2 features 24/06/2004 - make included with OS4 SDK 51.5 ??/??/???? - unknown changes CREDITS ------- Original SAS/C Amiga port for 68k AmigaOS by Aaron "Optimizer" Digulla Initial AmigaOS 4.0 port by Hans-Jörg Frieden (Hans-JoergF@hyperion-entertainment.com) Further modifications for AmigaOS 4.0 by Steven Solie (ssolie@telus.net) ------------------------------------------------------------------------------- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Make. GNU Make is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Make; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.