diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..c5eca7a9d2 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +# The PostgreSQL make files exploit features of GNU make that other +# makes do not have. Because it is a common mistake for users to try +# to build Postgres with a different make, we have this make file +# that, as a service, will look for a GNU make and invoke it, or show +# an error message if none could be found. + +# If the user were using GNU make now, this file would not get used +# because GNU make uses a make file named "GNUmakefile" in preference +# to "Makefile" if it exists. PostgreSQL is shipped with a +# "GNUmakefile". If the user hasn't run the configure script yet, the +# GNUmakefile won't exist yet, so we catch that case as well. + + +all install clean dep depend distclean maintainer-clean: + @if ! [ -f GNUmakefile ] ; then \ + echo "You need to run the \`configure' program first. See the file"; \ + echo "\`INSTALL' for installation instructions." ; \ + false ; \ + fi + @IFS=':' ; \ + for dir in $$PATH; do \ + for prog in gmake gnumake make; do \ + if [ -f $$dir/$$prog ] && ( $$dir/$$prog --version | grep GNU >/dev/null 2>&1 ) ; then \ + GMAKE=$$dir/$$prog; \ + break 2; \ + fi; \ + done; \ + done; \ + \ + if [ x"$${GMAKE+set}" = xset ]; then \ + echo "Using GNU make found at $${GMAKE}"; \ + $${GMAKE} $@ ; \ + else \ + echo "You must use GNU make to build PostgreSQL." ; \ + false; \ + fi diff --git a/src/Makefile b/src/Makefile index 8fbbcbdac2..c5eca7a9d2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,16 +1,36 @@ -# The Postgres make files exploit features of GNU make that other makes -# do not have. Because it is a common mistake for users to try to build -# Postgres with a different make, we have this make file that does nothing -# but tell the user to use GNU make. +# The PostgreSQL make files exploit features of GNU make that other +# makes do not have. Because it is a common mistake for users to try +# to build Postgres with a different make, we have this make file +# that, as a service, will look for a GNU make and invoke it, or show +# an error message if none could be found. -# If the user were using GNU make now, this file would not get used because -# GNU make uses a make file named "GNUmakefile" in preference to "Makefile" -# if it exists. Postgres is shipped with a "GNUmakefile". +# If the user were using GNU make now, this file would not get used +# because GNU make uses a make file named "GNUmakefile" in preference +# to "Makefile" if it exists. PostgreSQL is shipped with a +# "GNUmakefile". If the user hasn't run the configure script yet, the +# GNUmakefile won't exist yet, so we catch that case as well. -all install clean dep depend distclean: - @echo "You must use GNU make to use Postgres. It may be installed" - @echo "on your system with the name 'gmake'." - @echo - @echo "NOTE: If you are sure that you are using GNU make and you are" - @echo " still getting this message, you may simply need to run" - @echo " the configure program." + +all install clean dep depend distclean maintainer-clean: + @if ! [ -f GNUmakefile ] ; then \ + echo "You need to run the \`configure' program first. See the file"; \ + echo "\`INSTALL' for installation instructions." ; \ + false ; \ + fi + @IFS=':' ; \ + for dir in $$PATH; do \ + for prog in gmake gnumake make; do \ + if [ -f $$dir/$$prog ] && ( $$dir/$$prog --version | grep GNU >/dev/null 2>&1 ) ; then \ + GMAKE=$$dir/$$prog; \ + break 2; \ + fi; \ + done; \ + done; \ + \ + if [ x"$${GMAKE+set}" = xset ]; then \ + echo "Using GNU make found at $${GMAKE}"; \ + $${GMAKE} $@ ; \ + else \ + echo "You must use GNU make to build PostgreSQL." ; \ + false; \ + fi