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 Amiga-specific projects.
The gmake executable defaults to using abc-shell to execute commands.
This is the version to use for maximum portability and porting
applications from other platforms.
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.
PATH CONVERSION FUNCTIONS
-------------------------
Two additional make functions have been made available to convert
to and from POSIX-style paths.
$(amigapath from)
Performs a conversion from the supplied POSIX-style path to the
returned AmigaOS-style path.
$(posixpath from)
Performs a conversion from the supplied AmigaOS-style path to the
returned POSIX-style path.
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
-------
53.1 - compiled with GCC 4.2.4 and clib2 1.204 which fixes
infrequent floating point alignment issues
52.1 - changed to new versioning scheme
- now requires dos.library 52.5 or greater for alias support
- fixed problem with sending CTRL-C to all child processes of
the launching shell
- fixed output of text when redirected to a file which used
to get all jumbled up
3.81-7 - fixed problem with command_execute returning with an
exit code of 127 even when it succeeded
(thanks Andy Broad)
- fixed problem with lost output text when using
command_execute (thanks Andy Broad)
- removed extra line feed in sh command lines
3.81-6 - compiled with latest beta SDK
- fixed problem with lost aliases when using AmigaShell
(thanks Daniel Allsopp)
- added new amigapath and posixpath make functions to
convert from one path style to the other
3.81-5 - now uses case-sensitive comparisons no matter what the
underlying file system is capable of for maximum
compatibility during porting
(thanks Henning Nielsen Lund)
- removed workaround for shell 51.x
- removed support for AmigaOS device names; it is just
impossible to parse out targets from device names
(thanks Thore Böckelmann)
- now uses getopt() from clib2
- cleaned up Makefile.AmigaOS
3.81-4 - fixed environ building to exclude all subdirectories
(thanks Tony Wyatt)
- added exclusion of .xml variables from environ
- compiled with clib2 CVS dated 2006-11-18
3.81-3 - fixed pattern substitution rules to work correctly when
you have patterns like "$(LIBOBJECTS):%.o:%.c importinc"
(thanks Thore Böckelmann)
3.81-2 - changed exit code to EXIT_FAILURE on fatal signal
- fixed break processing so the parent signals the child
processes now (thanks Colin Wenzel)
- added custom __check_abort() to signal child processes
from clib2 function calls
- added extra code to cleanup stray child processes at
exit just in case
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.x 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.
| |