[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