[PATCH] Fix Windows build with cmd.exe as shell

Simon Richter <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
cmd.exe has unsubtly different behaviour from POSIX sh in a lot of places.
This determines whether the current default shell for make is cmd.exe, and
avoids "mkdir -p", "rm" and quotes around the argument to echo in this
case.
---
 build/Makefile.win32.common     | 22 ++++++---
 build/Makefile.win32.features-h | 98 ++++++++++++++++++++---------------------
 build/Makefile.win32.inform     | 14 +++---
 build/configure.ac.features     | 12 ++---
 src/Makefile.win32              | 21 +++++----
 5 files changed, 92 insertions(+), 75 deletions(-)

diff --git a/build/Makefile.win32.common b/build/Makefile.win32.common
index 7d7e973..3e4024d 100644
--- a/build/Makefile.win32.common
+++ b/build/Makefile.win32.common
@@ -1,5 +1,17 @@
 default: all
 
+ifeq ($(shell echo ""),)
+# POSIX style shell
+mkdir_p = mkdir -p $1
+rm = $(RM) $1
+echo = echo "$1"
+else
+# DOS/Windows style shell
+mkdir_p = if not exist $(subst /,\,$1) md $(subst /,\,$1)
+echo = $(if $1,echo $1,echo.)
+rm = del $(subst /,\,$1)
+endif
+
 #
 # Edit build/Makefile.win32.features to enable features to build
 #
@@ -63,12 +75,12 @@ CAIRO_ARFLAGS = $(DEFAULT_ARFLAGS) $(LDFLAGS)
 # Some generic rules
 
 $(CFG)/%.obj: %.c $(top_srcdir)/src/cairo-features.h
-	@mkdir -p $(CFG)/`dirname $<`
-	@$(CC) $(CAIRO_CFLAGS) -c -Fo"$@" $<
+	$(call mkdir_p,$(@D))
+	$(CC) $(CAIRO_CFLAGS) -c -Fo"$@" $<
 
 $(CFG)/%-static.obj: %.c $(top_srcdir)/src/cairo-features.h
-	@mkdir -p $(CFG)/`dirname $<`
-	@$(CC) $(CAIRO_CFLAGS) -c -DCAIRO_WIN32_STATIC_BUILD=1 -Fo"$@" $<
+	$(call mkdir_p,$(@D))
+	$(CC) $(CAIRO_CFLAGS) -c -DCAIRO_WIN32_STATIC_BUILD=1 -Fo"$@" $<
 
 clean:
-	@rm -f $(CFG)/*.obj $(CFG)/*.dll $(CFG)/*.lib $(CFG)/*.pdb $(CFG)/*.ilk || exit 0
+	-$(call rm,$(CFG)/*.obj $(CFG)/*.dll $(CFG)/*.lib $(CFG)/*.pdb $(CFG)/*.ilk)
diff --git a/build/Makefile.win32.features-h b/build/Makefile.win32.features-h
index 13904cf..f3dd420 100644
--- a/build/Makefile.win32.features-h
+++ b/build/Makefile.win32.features-h
@@ -1,130 +1,130 @@
 # Generated by configure.  Do not edit.
 
 $(top_srcdir)/src/cairo-features.h: $(top_srcdir)/build/Makefile.win32.features
-	@echo "Generating src/cairo-features.h"
-	@echo "/* Generated by Makefile.win32.features-h.  Do not edit. */" > $(top_srcdir)/src/cairo-features.h
-	@echo "#ifndef CAIRO_FEATURES_H" >> $(top_srcdir)/src/cairo-features.h
-	@echo "#define CAIRO_FEATURES_H 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,Generating src/cairo-features.h)
+	@$(call echo,/* Generated by Makefile.win32.features-h.  Do not edit. */) > $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#ifndef CAIRO_FEATURES_H) >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_FEATURES_H 1) >> $(top_srcdir)/src/cairo-features.h
 ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)
-	@echo "#define CAIRO_HAS_XLIB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XLIB_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)
-	@echo "#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_XCB_SURFACE),1)
-	@echo "#define CAIRO_HAS_XCB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XCB_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_XCB_SHM_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XCB_SHM_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_QT_SURFACE),1)
-	@echo "#define CAIRO_HAS_QT_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_QT_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)
-	@echo "#define CAIRO_HAS_QUARTZ_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_QUARTZ_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)
-	@echo "#define CAIRO_HAS_QUARTZ_FONT 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_QUARTZ_FONT 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)
-	@echo "#define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)
-	@echo "#define CAIRO_HAS_WIN32_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_WIN32_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_WIN32_FONT),1)
-	@echo "#define CAIRO_HAS_WIN32_FONT 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_WIN32_FONT 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)
-	@echo "#define CAIRO_HAS_SKIA_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_SKIA_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_OS2_SURFACE),1)
-	@echo "#define CAIRO_HAS_OS2_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_OS2_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)
-	@echo "#define CAIRO_HAS_BEOS_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_BEOS_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_DRM_SURFACE),1)
-	@echo "#define CAIRO_HAS_DRM_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_DRM_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)
-	@echo "#define CAIRO_HAS_GALLIUM_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_GALLIUM_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_PNG_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_PNG_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_GL_SURFACE),1)
-	@echo "#define CAIRO_HAS_GL_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_GL_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)
-	@echo "#define CAIRO_HAS_GLESV2_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_GLESV2_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
-	@echo "#define CAIRO_HAS_COGL_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_COGL_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)
-	@echo "#define CAIRO_HAS_DIRECTFB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_DIRECTFB_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_VG_SURFACE),1)
-	@echo "#define CAIRO_HAS_VG_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_VG_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_EGL_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_EGL_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_GLX_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_GLX_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_WGL_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_WGL_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)
-	@echo "#define CAIRO_HAS_SCRIPT_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_SCRIPT_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_FT_FONT),1)
-	@echo "#define CAIRO_HAS_FT_FONT 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_FT_FONT 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_FC_FONT),1)
-	@echo "#define CAIRO_HAS_FC_FONT 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_FC_FONT 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_PS_SURFACE),1)
-	@echo "#define CAIRO_HAS_PS_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_PS_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_PDF_SURFACE),1)
-	@echo "#define CAIRO_HAS_PDF_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_PDF_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_SVG_SURFACE),1)
-	@echo "#define CAIRO_HAS_SVG_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_SVG_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_TEST_SURFACES),1)
-	@echo "#define CAIRO_HAS_TEST_SURFACES 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_TEST_SURFACES 1) >> $(top_srcdir)/src/cairo-features.h
 endif
-	@echo "#define CAIRO_HAS_IMAGE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
-	@echo "#define CAIRO_HAS_MIME_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
-	@echo "#define CAIRO_HAS_RECORDING_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
-	@echo "#define CAIRO_HAS_OBSERVER_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_IMAGE_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_MIME_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_RECORDING_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_OBSERVER_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 ifeq ($(CAIRO_HAS_TEE_SURFACE),1)
-	@echo "#define CAIRO_HAS_TEE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_TEE_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_XML_SURFACE),1)
-	@echo "#define CAIRO_HAS_XML_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_XML_SURFACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
-	@echo "#define CAIRO_HAS_USER_FONT 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_USER_FONT 1) >> $(top_srcdir)/src/cairo-features.h
 ifeq ($(CAIRO_HAS_PTHREAD),1)
-	@echo "#define CAIRO_HAS_PTHREAD 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_PTHREAD 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)
-	@echo "#define CAIRO_HAS_GOBJECT_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_GOBJECT_FUNCTIONS 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_TRACE),1)
-	@echo "#define CAIRO_HAS_TRACE 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_TRACE 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_INTERPRETER),1)
-	@echo "#define CAIRO_HAS_INTERPRETER 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_INTERPRETER 1) >> $(top_srcdir)/src/cairo-features.h
 endif
 ifeq ($(CAIRO_HAS_SYMBOL_LOOKUP),1)
-	@echo "#define CAIRO_HAS_SYMBOL_LOOKUP 1" >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#define CAIRO_HAS_SYMBOL_LOOKUP 1) >> $(top_srcdir)/src/cairo-features.h
 endif
-	@echo "#endif" >>  $(top_srcdir)/src/cairo-features.h
+	@$(call echo,#endif) >>  $(top_srcdir)/src/cairo-features.h
diff --git a/build/Makefile.win32.inform b/build/Makefile.win32.inform
index ba11165..99a438c 100644
--- a/build/Makefile.win32.inform
+++ b/build/Makefile.win32.inform
@@ -1,13 +1,13 @@
 inform:
-	@echo
+	@$(call echo)
 ifneq ($(CFG),release)
 ifneq ($(CFG),debug)
-	@echo "Invalid configuration "$(CFG)" specified."
-	@echo -n "You must specify a configuration when "
-	@echo "running make, e.g. make CFG=debug"
-	@echo
-	@echo -n "Possible choices for configuration are "
-	@echo "'release' and 'debug'"
+	@$(call echo,Invalid configuration "$(CFG)" specified.)
+	@$(call echo,You must specify a configuration when)
+	@$(call echo,running make, e.g. make CFG=debug)
+	@$(call echo)
+	@$(call echo,Possible choices for configuration are)
+	@$(call echo,'release' and 'debug')
 	@exit 1
 endif
 endif
diff --git a/build/configure.ac.features b/build/configure.ac.features
index e4a2aaf..af378c2 100644
--- a/build/configure.ac.features
+++ b/build/configure.ac.features
@@ -296,17 +296,17 @@ CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32([win32_features_h],[build],[features-h])
 dnl
 CAIRO_MAKEFILE_ACCUMULATE([win32_features_h],
 [$(top_srcdir)/src/cairo-features.h: $(top_srcdir)/build/Makefile.win32.features
-	@echo "Generating src/cairo-features.h"
-	@echo "/* Generated by Makefile.win32.features-h.  Do not edit. */" > $(top_srcdir)/src/cairo-features.h
-	@echo "[#]ifndef CAIRO_FEATURES_H" >> $(top_srcdir)/src/cairo-features.h
-	@echo "[#]define CAIRO_FEATURES_H 1" >> $(top_srcdir)/src/cairo-features.h]dnl
+	@$(call echo,Generating src/cairo-features.h)
+	@$(call echo,/* Generated by Makefile.win32.features-h.  Do not edit. */) > $(top_srcdir)/src/cairo-features.h
+	@$(call echo,[#]ifndef CAIRO_FEATURES_H) >> $(top_srcdir)/src/cairo-features.h
+	@$(call echo,[#]define CAIRO_FEATURES_H 1) >> $(top_srcdir)/src/cairo-features.h]dnl
 )
 AC_CONFIG_COMMANDS_PRE(
 [dnl
-	CAIRO_MAKEFILE_ACCUMULATE([win32_features_h], [	@echo "[#]endif" >>  $(top_srcdir)/src/cairo-features.h])
+	CAIRO_MAKEFILE_ACCUMULATE([win32_features_h], [	@$(call echo,[#]endif) >>  $(top_srcdir)/src/cairo-features.h])
 ])dnl
 CAIRO_MAKEFILE_ACCUMULATE_FEATURE([win32_features_h],yes,*,*,dnl
-[	@echo "[#]define cr_feature_tag 1" >> $(top_srcdir)/src/cairo-features.h]dnl
+[	@$(call echo,[#]define cr_feature_tag 1) >> $(top_srcdir)/src/cairo-features.h]dnl
 )dnl
 
 
diff --git a/src/Makefile.win32 b/src/Makefile.win32
index 864791f..b6ca8fd 100644
--- a/src/Makefile.win32
+++ b/src/Makefile.win32
@@ -2,6 +2,11 @@ top_srcdir = ..
 include $(top_srcdir)/build/Makefile.win32.common
 include Makefile.win32.features
 
+define n
+
+
+endef
+
 SOURCES = $(enabled_cairo_sources)
 
 STATIC_SOURCES = cairo-system.c
@@ -19,11 +24,11 @@ $(CFG)/cairo-static.lib: $(OBJECTS_STATIC)
 	@$(AR) $(CAIRO_ARFLAGS) -OUT:$@ $(PIXMAN_LIBS) $(OBJECTS_STATIC)
 
 all: inform $(CFG)/cairo.dll $(CFG)/cairo-static.lib
-	@echo "Built successfully!"
-	@echo "You should copy the following files to a proper place now:"
-	@echo ""
-	@echo "	cairo-version.h (NOTE: toplevel, not the src/cairo-version.h one!)"
-	@echo "	src/cairo-features.h"
-	@for x in $(enabled_cairo_headers); do echo "	src/$$x"; done
-	@echo "	src/$(CFG)/cairo.dll"
-	@echo "	src/$(CFG)/cairo-static.lib"
+	@$(call echo,Built successfully!)
+	@$(call echo,You should copy the following files to a proper place now:)
+	@$(call echo)
+	@$(call echo,	cairo-version.h (NOTE: toplevel, not the src/cairo-version.h one!))
+	@$(call echo,	src/cairo-features.h)
+	$(foreach x,$(enabled_cairo_headers),@$(call echo,	src/$x$n))
+	@$(call echo,	src/$(CFG)/cairo.dll)
+	@$(call echo,	src/$(CFG)/cairo-static.lib)
-- 
2.1.4

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.