[petsc-dev] Experimental GNU make build system

Satish Balay balay at mcs.anl.gov
Thu Jun 6 00:22:51 CDT 2013


On Tue, 4 Jun 2013, Jed Brown wrote:

> You should be able to do a multi-line definition, something like this:
> 
> define ARCHIVE_RECIPE_CYGWIN
>   @$(RM) $@ $@.args
>   @cygpath -w $^ > $@.args
>   $(call quiet,AR) $(AR_FLAGS) $@ @`cygpath -w $@.args`
>   $(call quiet,RANLIB) $@
>   @$(RM) $@.args
> endef
> 
> define ARCHIVE_RECIPE_DEFAULT
>   @$(RM) $@
>   $(call quiet,AR) $(AR_FLAGS) $@ $^
>   $(call quiet,RANLIB) $@
> endef
> 
> %.$(AR_LIB_SUFFIX) : $$(obj) | $$(@D)/.DIR
> 	$(if $(PETSC_HAVE_CYGWIN),$(ARCHIVE_RECIPE_CYGWIN),$(ARCHIVE_RECIPE_DEFAULT))

I have the follwing patch to get the conditionals required for windows.

PETSC_CYGWIN_BROKEN_PIPE is now required only for 'cygwin-ar' - so
thats the first change.

And then the ARCHIVE_RECIPE_WIN32FE_LIB is required only when 'win32fe
lib' is the archiver. [In the future there could be others?]

Instead of adding configure tests for these - I just added conditionals in the gmakefile.

Satish
---------
diff --git a/gmakefile b/gmakefile
index bf9ce21..3dc4083 100644
--- a/gmakefile
+++ b/gmakefile
@@ -29,8 +29,10 @@ all : $(generated) $(libpetscall)
 
 #workarround old cygwin versions
 ifeq ($(PETSC_CYGWIN_BROKEN_PIPE),1)
+ifeq ($(shell basename $(AR)),ar)
   V ?=1
 endif
+endif
 ifeq ($(V),)
   quiet_HELP := "Use \"$(MAKE) V=1\" to see the verbose compile lines.\n"
   quiet = @printf $(quiet_HELP)$(eval quiet_HELP:=)"  %10s %s\n" "$1$2" "$@"; $($1)
@@ -67,10 +69,21 @@ $(libpetsc_shared) : $(srcs.o) | $$(@D)/.DIR
 
 $(libpetsc_static) : obj := $(srcs.o)
 
+define ARCHIVE_RECIPE_WIN32FE_LIB
+  @$(RM) $@ $@.args
+  @cygpath -w $^ > $@.args
+  $(call quiet,AR) $(AR_FLAGS) $@ @$@.args
+  @$(RM) $@.args
+endef
+
+define ARCHIVE_RECIPE_DEFAULT
+  @$(RM) $@
+  $(call quiet,AR) $(AR_FLAGS) $@ $^
+  $(call quiet,RANLIB) $@
+endef
+
 %.$(AR_LIB_SUFFIX) : $$(obj) | $$(@D)/.DIR
-                   @$(RM) $@
-                   $(call quiet,AR) $(AR_FLAGS) $@ $^
-                   $(call quiet,RANLIB) $@
+                   $(if $(findstring win32fe lib,$(AR)),$(ARCHIVE_RECIPE_WIN32FE_LIB),$(ARCHIVE_RECIPE_DEFAULT))
 
 # with-single-library=0
 libpkg = $(foreach pkg, $1, $(LIBDIR)/libpetsc$(pkg).so)



More information about the petsc-dev mailing list