You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Martin Sebor <se...@roguewave.com> on 2007/08/25 03:55:52 UTC

Re: svn commit: r569584 - in /incubator/stdcxx/branches/4.2.0: GNUmakefile etc/config/GNUmakefile.cfg etc/config/makefile.rules etc/config/src/LIMITS.cpp etc/config/sunpro.config

ablack@apache.org wrote:
> Author: ablack
> Date: Fri Aug 24 17:29:23 2007
> New Revision: 569584
> 
> URL: http://svn.apache.org/viewvc?rev=569584&view=rev
> Log:
> 2007-08-24  Andrew Black  <ab...@roguewave.com>
> 
> 	STDCXX-470
> 	STDCXX-479
> 	STDCXX-481

FWIW, this change doesn't fix these bugs, it just integrates
the already committed fixes to the [pre]release branch. So,
IMO, the bugs shouldn't be referenced here. The main reason
why I think it's wrong is because this commit is now recorded
in each of the issues, giving the impression that it's a patch
necessary to fix the bugs.

In addition, quoting from the Committers section of our page
(http://incubator.apache.org/stdcxx/#committers), the policy
that we all voted in is:

   "For potentially unsafe changes or any changes to branches
   all stdcxx committers follow the Review-Then-Commit policy
  (RTC for short)."

Martin

> 	* etc/config/src/LIMITS.cpp: Revert
> 	http://svn.apache.org/viewvc?view=rev&revision=554421 ,
> 	accidentally merged to 4.2.0 prematurely as part of
> 	http://svn.apache.org/viewvc?view=rev&revision=569152 .
> 	* GNUmakefile: Deploy
> 	http://svn.apache.org/viewcvs?view=rev&rev=555061 to enable
> 	building with Sun C++ 5.9 (Sun Studio 12).
> 	* etc/config/GNUmakefile.cfg: Ditto.
> 	* etc/config/sunpro.config: Ditto.
> 	* etc/config/makefile.rules: Ditto.
> 
> Modified:
>     incubator/stdcxx/branches/4.2.0/GNUmakefile
>     incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
>     incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
>     incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
>     incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
> 
> Modified: incubator/stdcxx/branches/4.2.0/GNUmakefile
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/GNUmakefile?rev=569584&r1=569583&r2=569584&view=diff
> ==============================================================================
> --- incubator/stdcxx/branches/4.2.0/GNUmakefile (original)
> +++ incubator/stdcxx/branches/4.2.0/GNUmakefile Fri Aug 24 17:29:23 2007
> @@ -588,7 +588,10 @@
>            && echo "PICFLAGS   = $(PICFLAGS)"             >> $(MAKEFILE_IN)  \
>            && echo "CPPFLAGS   = $(CPPFLAGS)"             >> $(MAKEFILE_IN)  \
>            && echo "WARNFLAGS  = $(WARNFLAGS)"            >> $(MAKEFILE_IN)  \
> -          && echo "DEPENDFLAGS = $(DEPENDFLAGS)"         >> $(MAKEFILE_IN)  \
> +          && echo "DEPENDFLAGS     = $(DEPENDFLAGS)"     >> $(MAKEFILE_IN)  \
> +          && echo "DEPENDFLAGS.cpp = $(DEPENDFLAGS.cpp)" >> $(MAKEFILE_IN)  \
> +          && echo "DEPENDFLAGS$(AS_EXT) = $(value DEPENDFLAGS$(AS_EXT))"    \
> +                                                         >> $(MAKEFILE_IN)  \
>            && echo "AS_EXT     = $(AS_EXT)"               >> $(MAKEFILE_IN)  \
>            && echo "LD         = $(LD)"                   >> $(MAKEFILE_IN)  \
>            && echo "LDFLAGS    = $(LDFLAGS)"              >> $(MAKEFILE_IN)  \
> 
> Modified: incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg?rev=569584&r1=569583&r2=569584&view=diff
> ==============================================================================
> --- incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg (original)
> +++ incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg Fri Aug 24 17:29:23 2007
> @@ -145,6 +145,11 @@
>  # (re)create config.h; do not change timestamp if the new file is the same
>  # make .o first to make sure the %.o: %.cpp rule gets invoked (make bug?)
>  # run a configure script as the last step (e.g., to remove unwanted files)
> +
> +# creates a file named vars.sh, containing shell assignments corresponding
> +# to makefile variables defined in $(BUILDDIR)/makefile.in (variables with
> +# invalid names (those containing periods) are commented out); vars.sh is
> +# used in libc_decl.sh to invoke the compiler and linker
>  config: clean sane 
>  	@([ -f config.h ] && mv config.h config.h.~ ;                       \
>            echo "// configured for $(CCNAME) on `uname -sr`" >config.h ;     \
> @@ -163,6 +168,7 @@
>                    if [ ! -f vars.sh ] ; then                                \
>                        cat ../makefile.in                                    \
>                        | sed -e "s/= *\([^ ][^ ]* .*\)/=\"\1\"/"             \
> +                            -e "s/^\( *[^=]*\.[^=]*=.*\)/# \1/"             \
>                              -e "s/^\([^ ]*\) *= *\(.*\)/\1=\2 ; export \1/" \
>                              -e 's/$$(\([^)]*\))/${\1}/g' >vars.sh ;         \
>                    fi ;                                                      \
> 
> Modified: incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules?rev=569584&r1=569583&r2=569584&view=diff
> ==============================================================================
> --- incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules (original)
> +++ incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules Fri Aug 24 17:29:23 2007
> @@ -119,8 +119,9 @@
>          PATH=$$PATH:.;                                                    \
>          TOPDIR=$(TOPDIR);                                                 \
>          TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
> +        TZ=MST+7;                                                         \
>          export TMP;                                                       \
> -        export LD_LIBRARY_PATH PATH TMP TOPDIR;                           \
> +        export LD_LIBRARY_PATH PATH TMP TOPDIR TZ;                        \
>          trap "rm -rf $$TMP" HUP INT QUIT TERM EXIT;                       \
>          mkdir -p $$TMP;                                                   \
>          ./run $(RUNFLAGS) $(RUNTARGET);                                   \
> @@ -133,8 +134,9 @@
>          PATH=$$PATH:$(LIBDIR):.;                                          \
>          TOPDIR=$(TOPDIR);                                                 \
>          TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
> +        TZ=MST+7;                                                         \
>          export TMP;                                                       \
> -        export LD_LIBRARY_PATH PATH TMP TOPDIR;                           \
> +        export LD_LIBRARY_PATH PATH TMP TOPDIR TZ;                        \
>          trap "rm -rf $$TMP" HUP INT QUIT TERM EXIT;                       \
>          mkdir -p $$TMP;                                                   \
>          ./run $(RUNFLAGS) $(RUNTARGET);                                   \
> @@ -164,8 +166,6 @@
>  endif   # eq ($(findstring clean,$(MAKECMDGOALS)),)
>  
>  
> -ifneq ($(DEPENDFLAGS),)
> -
>  # generate dependencies only if they don't yet exist, removing anything
>  # not under $(TOPDIR) or $(BUILDDIR) (e.g., system headers) from the list
>  # this is done by splitting up dependencies using tr so that there is just
> @@ -186,8 +186,9 @@
>                     s:$$RWTSRCDIR:$$""(TOPDIR)/\.\./rwtest:gp;                \
>                     s:$(TOPDIR):$$""(TOPDIR):gp;                              \
>                     s:$(BUILDDIR):$$""(BUILDDIR):gp" ;                        \
> -                                                                             \
> -           $(CXX) $(DEPENDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $<                  \
> +	   depflags="$(value DEPENDFLAGS$(depsuffix))";                      \
> +           echo "$(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS) $<";              \
> +           $(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS) $<                      \
>                 | sed "$$sedexp1" | tr "@" "\n" | sed -n "$$sedexp2" >$@ ;    \
>             if [ ! -s $@ ]; then                                              \
>                 depfile=$*.u;                                                 \
> @@ -205,14 +206,36 @@
>  $(DEPENDDIR):
>  	@[ ! -d $(DEPENDDIR) ] && mkdir -p $(DEPENDDIR)
>  
> +
> +ifeq ($(DEPENDFLAGS),)
> +  # if DEPENDFLAGS is empty or not defined, set it to the concatenation
> +  # of the variables specific to each type of a source file
> +  DEPENDFLAGS = $(DEPENDFLAGS.cpp) $(value DEPENDFLAGS$(AS_EXT))
> +else
> +  DEPENDFLAGS.cpp := $(DEPENDFLAGS)
> +  DEPENDFLAGS.S   := $(DEPENDFLAGS)
> +  DEPENDFLAGS.s   := $(DEPENDFLAGS)
> +endif
> +
> +ifneq ($(DEPENDFLAGS),)
> +
> +# set depsuffix to the suffix of the first prerequisite
> +$(DEPENDDIR)/%.d: depsuffix = $(suffix $<)
> +
> +  ifneq ($(DEPENDFLAGS.cpp),)
> +
>  # rule to make dependencies for C++ source files
>  $(DEPENDDIR)/%.d: %.cpp $(DEPENDDIR)
>  	$(makedep)
>  
> +  endif   # DEPENDFLAGS.cpp
> +  ifneq ($(value DEPENDFLAGS$(AS_EXT)),)
> +
>  # rule to make dependencies for assembly files
>  $(DEPENDDIR)/%.d: %$(AS_EXT) $(DEPENDDIR)
>  	$(makedep)
>  
> +  endif   # DEPENDFLAGS.as
>  
>  else   # ifeq ($(DEPENDFLAGS),)
>  
> 
> Modified: incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp?rev=569584&r1=569583&r2=569584&view=diff
> ==============================================================================
> --- incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp (original)
> +++ incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp Fri Aug 24 17:29:23 2007
> @@ -336,14 +336,14 @@
>  
>  #ifndef _RWSTD_NO_WCHAR_T
>  
> -    printf ("#define _RWSTD_WCHAR_SIZE  %2u /* sizeof (wchar_t) */\n",
> +    printf ("#define _RWSTD_WCHAR_T_SIZE  %2u /* sizeof (wchar_t) */\n",
>              SIZEOF (wchar_t));
>  
>      const char *suffix = "U";
>      if ((wchar_t)~0 < (wchar_t)0)
>          suffix = "";
>      
> -    MKLIMITS (wchar_t, "WCHAR", suffix, "wchar_t");
> +    MKLIMITS (wchar_t, "WCHAR_T", suffix, "wchar_t");
>  
>  #endif   // _RWSTD_NO_WCHAR_T
>  
> 
> Modified: incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config?rev=569584&r1=569583&r2=569584&view=diff
> ==============================================================================
> --- incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config (original)
> +++ incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config Fri Aug 24 17:29:23 2007
> @@ -10,9 +10,24 @@
>  
>  # extract the "C++ m.n" substring from version string (whcih changes
>  # from one release of the compiler to another)
> -CCVER          := $(shell $(CXX) -V 2>&1 | head -n1 | sed 's/.*C\+\+ *\([^ ]*\).*/\1/')
> +CCVER          := $(shell   $(CXX) -V 2>&1 | head -n1 \
> +                          | sed 's/.*C\+\+ *\([^ ]*\).*/\1/')
> +CCMAJOR        := $(shell echo $(CCVER) | cut -f1 -d'.')
> +CCMINOR        := $(shell echo $(CCVER) | cut -f2 -d'.')
> +
> +ifeq ($(shell expr $(CCMAJOR) = 5 \& $(CCMINOR) = 9),1)	
> +  # in Sun C++ 5.9 -xM can only be used with C and C++ files
> +  # and it produces the wrong results with .{S,s} files
> +  DEPENDFLAGS.cpp = -xM
> +
> +  # deliberately undefined:
> +  # DEPENDFLAGS.S =
> +  # DEPENDFLAGS   =
> +else
> +  DEPENDFLAGS     = -xM
> +endif
> +
>  WARNFLAGS       = +w
> -DEPENDFLAGS     = -xM
>  PICFLAGS        = -KPIC
>  LDSOFLAGS       = 
>  CXXFLAGS        = -library=%none
> @@ -77,21 +92,38 @@
>  SINGL_CPPFLAGS =
>  SINGL_LDFLAGS  =
>  
> -# (try to) determine the architecture via the (non-standard) -p option
> -# recognized on (at least) Linux and Solaris
> -arch=$(shell uname -p 2>/dev/null)
> -
> -ifeq ($(arch),sparc)
> -    # wide (64-bit) flags -- must be set explicitly
> -    # narrow (32-bit) flags are implicit on SPARC
> -    wide_flags     = -xarch=v9
> -    narrow_flags   = -xarch=v8
> +ifeq ($(shell expr $(CCMAJOR) \>= 5 \& $(CCMINOR) \>= 9),1)
> +
> +    # starting with Sun C++ 5.9, the compiler prefers the generic
> +    # -m32 and -m64 options to the architecture specific -xarch
> +    # options some of which have been deprecated
> +    wide_flags   = -m64
> +    narrow_flags = -m32
>  else
> -    # wide (64-bit) flags -- must be set explicitly
> -    # narrow (32-bit) flags are implicit on AMD64
> -    ifeq ($(arch),amd64)
> -        wide_flags     = -xarch=amd64
> -        narrow_flags   =
> +    # (try to) determine the architecture via the (non-standard)
> +    # -p option recognized on (at least) Linux and Solaris
> +    arch := $(shell uname -p 2>/dev/null)
> +
> +    ifeq ($(arch),sparc)
> +        # wide (64-bit) flags -- must be set explicitly
> +        # narrow (32-bit) flags are implicit on SPARC
> +        wide_flags   = -xarch=v9
> +        narrow_flags = -xarch=v8
> +    else
> +        # wide (64-bit) flags -- must be set explicitly
> +        # narrow (32-bit) flags are implicit on AMD64
> +        ifeq ($(OSNAME),SunOS)
> +            # Solaris uname -p prints i386 on AMD64, use the optisa
> +            # command to deterrmine "the best" architecture
> +            arch := $(shell optisa amd64)
> +        endif
> +        ifeq ($(arch),amd64)
> +            wide_flags   = -xarch=amd64
> +            narrow_flags = -xarch=386 # the default (same as generic)
> +        else
> +            wide_flags   = -xarch=generic64
> +            narrow_flags = -xarch=generic # the default (same as 386)
> +        endif
>      endif
>  endif
>  
> 
> 


Re: svn commit: r569584 - in /incubator/stdcxx/branches/4.2.0: GNUmakefile etc/config/GNUmakefile.cfg etc/config/makefile.rules etc/config/src/LIMITS.cpp etc/config/sunpro.config

Posted by Martin Sebor <se...@roguewave.com>.
Andrew Black wrote:
> *shrugs*
> 
> I normally don't work with any part of subversion other than trunk, so
> I'm not as familiar with the procedures for working on the branches.  I
> suppose I should have sent the proposed patch to the list while I was
> running the couple sanity builds, but I was more concerned with trying
> to get things recovered from the bad merge, along with other internal work.

I'm not quite sure how to read this. If you think the RTC policy
for branches is too heavy-weight and have an idea for one that
allows for the kind of exception you're talking about feel free
to propose it. But unless and until we all decide to implement
such a change to the policy please post changes intended for
a pre-release branch to the list for review first.

Martin

> 
> The nightly testing sources need to be updated for the 4.2.0 release
> branch, but provided we get decent results out of it I'm thinking we'll
> probably end up tagging it as -rc2.
> 
> --Andrew Black
> 
> Martin Sebor wrote:
>> ablack@apache.org wrote:
>>> Author: ablack
>>> Date: Fri Aug 24 17:29:23 2007
>>> New Revision: 569584
>>>
>>> URL: http://svn.apache.org/viewvc?rev=569584&view=rev
>>> Log:
>>> 2007-08-24  Andrew Black  <ab...@roguewave.com>
>>>
>>>     STDCXX-470
>>>     STDCXX-479
>>>     STDCXX-481
>> FWIW, this change doesn't fix these bugs, it just integrates
>> the already committed fixes to the [pre]release branch. So,
>> IMO, the bugs shouldn't be referenced here. The main reason
>> why I think it's wrong is because this commit is now recorded
>> in each of the issues, giving the impression that it's a patch
>> necessary to fix the bugs.
>>
>> In addition, quoting from the Committers section of our page
>> (http://incubator.apache.org/stdcxx/#committers), the policy
>> that we all voted in is:
>>
>>   "For potentially unsafe changes or any changes to branches
>>   all stdcxx committers follow the Review-Then-Commit policy
>>  (RTC for short)."
>>
>> Martin
>>
>>>     * etc/config/src/LIMITS.cpp: Revert
>>>     http://svn.apache.org/viewvc?view=rev&revision=554421 ,
>>>     accidentally merged to 4.2.0 prematurely as part of
>>>     http://svn.apache.org/viewvc?view=rev&revision=569152 .
>>>     * GNUmakefile: Deploy
>>>     http://svn.apache.org/viewcvs?view=rev&rev=555061 to enable
>>>     building with Sun C++ 5.9 (Sun Studio 12).
>>>     * etc/config/GNUmakefile.cfg: Ditto.
>>>     * etc/config/sunpro.config: Ditto.
>>>     * etc/config/makefile.rules: Ditto.
>>>
>>> Modified:
>>>     incubator/stdcxx/branches/4.2.0/GNUmakefile
>>>     incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
>>>     incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
>>>     incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
>>>     incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
>>>
>>> Modified: incubator/stdcxx/branches/4.2.0/GNUmakefile
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/GNUmakefile?rev=569584&r1=569583&r2=569584&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- incubator/stdcxx/branches/4.2.0/GNUmakefile (original)
>>> +++ incubator/stdcxx/branches/4.2.0/GNUmakefile Fri Aug 24 17:29:23 2007
>>> @@ -588,7 +588,10 @@
>>>            && echo "PICFLAGS   = $(PICFLAGS)"             >>
>>> $(MAKEFILE_IN)  \
>>>            && echo "CPPFLAGS   = $(CPPFLAGS)"             >>
>>> $(MAKEFILE_IN)  \
>>>            && echo "WARNFLAGS  = $(WARNFLAGS)"            >>
>>> $(MAKEFILE_IN)  \
>>> -          && echo "DEPENDFLAGS = $(DEPENDFLAGS)"         >>
>>> $(MAKEFILE_IN)  \
>>> +          && echo "DEPENDFLAGS     = $(DEPENDFLAGS)"     >>
>>> $(MAKEFILE_IN)  \
>>> +          && echo "DEPENDFLAGS.cpp = $(DEPENDFLAGS.cpp)" >>
>>> $(MAKEFILE_IN)  \
>>> +          && echo "DEPENDFLAGS$(AS_EXT) = $(value
>>> DEPENDFLAGS$(AS_EXT))"    \
>>> +                                                         >>
>>> $(MAKEFILE_IN)  \
>>>            && echo "AS_EXT     = $(AS_EXT)"               >>
>>> $(MAKEFILE_IN)  \
>>>            && echo "LD         = $(LD)"                   >>
>>> $(MAKEFILE_IN)  \
>>>            && echo "LDFLAGS    = $(LDFLAGS)"              >>
>>> $(MAKEFILE_IN)  \
>>>
>>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg?rev=569584&r1=569583&r2=569584&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg (original)
>>> +++ incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg Fri Aug
>>> 24 17:29:23 2007
>>> @@ -145,6 +145,11 @@
>>>  # (re)create config.h; do not change timestamp if the new file is the
>>> same
>>>  # make .o first to make sure the %.o: %.cpp rule gets invoked (make
>>> bug?)
>>>  # run a configure script as the last step (e.g., to remove unwanted
>>> files)
>>> +
>>> +# creates a file named vars.sh, containing shell assignments
>>> corresponding
>>> +# to makefile variables defined in $(BUILDDIR)/makefile.in (variables
>>> with
>>> +# invalid names (those containing periods) are commented out);
>>> vars.sh is
>>> +# used in libc_decl.sh to invoke the compiler and linker
>>>  config: clean sane      @([ -f config.h ] && mv config.h config.h.~
>>> ;                       \
>>>            echo "// configured for $(CCNAME) on `uname -sr`" >config.h
>>> ;     \
>>> @@ -163,6 +168,7 @@
>>>                    if [ ! -f vars.sh ] ;
>>> then                                \
>>>                        cat
>>> ../makefile.in                                    \
>>>                        | sed -e "s/= *\([^ ][^ ]*
>>> .*\)/=\"\1\"/"             \
>>> +                            -e "s/^\( *[^=]*\.[^=]*=.*\)/#
>>> \1/"             \
>>>                              -e "s/^\([^ ]*\) *= *\(.*\)/\1=\2 ;
>>> export \1/" \
>>>                              -e 's/$$(\([^)]*\))/${\1}/g' >vars.sh
>>> ;         \
>>>                    fi
>>> ;                                                      \
>>>
>>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules?rev=569584&r1=569583&r2=569584&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules (original)
>>> +++ incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules Fri Aug
>>> 24 17:29:23 2007
>>> @@ -119,8 +119,9 @@
>>>         
>>> PATH=$$PATH:.;                                                    \
>>>         
>>> TOPDIR=$(TOPDIR);                                                 \
>>>         
>>> TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
>>> +       
>>> TZ=MST+7;                                                         \
>>>          export
>>> TMP;                                                       \
>>> -        export LD_LIBRARY_PATH PATH TMP
>>> TOPDIR;                           \
>>> +        export LD_LIBRARY_PATH PATH TMP TOPDIR
>>> TZ;                        \
>>>          trap "rm -rf $$TMP" HUP INT QUIT TERM
>>> EXIT;                       \
>>>          mkdir -p
>>> $$TMP;                                                   \
>>>          ./run $(RUNFLAGS)
>>> $(RUNTARGET);                                   \
>>> @@ -133,8 +134,9 @@
>>>         
>>> PATH=$$PATH:$(LIBDIR):.;                                          \
>>>         
>>> TOPDIR=$(TOPDIR);                                                 \
>>>         
>>> TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
>>> +       
>>> TZ=MST+7;                                                         \
>>>          export
>>> TMP;                                                       \
>>> -        export LD_LIBRARY_PATH PATH TMP
>>> TOPDIR;                           \
>>> +        export LD_LIBRARY_PATH PATH TMP TOPDIR
>>> TZ;                        \
>>>          trap "rm -rf $$TMP" HUP INT QUIT TERM
>>> EXIT;                       \
>>>          mkdir -p
>>> $$TMP;                                                   \
>>>          ./run $(RUNFLAGS)
>>> $(RUNTARGET);                                   \
>>> @@ -164,8 +166,6 @@
>>>  endif   # eq ($(findstring clean,$(MAKECMDGOALS)),)
>>>  
>>>  
>>> -ifneq ($(DEPENDFLAGS),)
>>> -
>>>  # generate dependencies only if they don't yet exist, removing anything
>>>  # not under $(TOPDIR) or $(BUILDDIR) (e.g., system headers) from the
>>> list
>>>  # this is done by splitting up dependencies using tr so that there is
>>> just
>>> @@ -186,8 +186,9 @@
>>>                    
>>> s:$$RWTSRCDIR:$$""(TOPDIR)/\.\./rwtest:gp;                \
>>>                    
>>> s:$(TOPDIR):$$""(TOPDIR):gp;                              \
>>>                     s:$(BUILDDIR):$$""(BUILDDIR):gp"
>>> ;                        \
>>> -                                                                            
>>> \
>>> -           $(CXX) $(DEPENDFLAGS) $(CPPFLAGS) $(CXXFLAGS)
>>> $<                  \
>>> +       depflags="$(value
>>> DEPENDFLAGS$(depsuffix))";                      \
>>> +           echo "$(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS)
>>> $<";              \
>>> +           $(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS)
>>> $<                      \
>>>                 | sed "$$sedexp1" | tr "@" "\n" | sed -n "$$sedexp2"
>>>> $@ ;    \
>>>             if [ ! -s $@ ];
>>> then                                              \
>>>                
>>> depfile=$*.u;                                                 \
>>> @@ -205,14 +206,36 @@
>>>  $(DEPENDDIR):
>>>      @[ ! -d $(DEPENDDIR) ] && mkdir -p $(DEPENDDIR)
>>>  
>>> +
>>> +ifeq ($(DEPENDFLAGS),)
>>> +  # if DEPENDFLAGS is empty or not defined, set it to the concatenation
>>> +  # of the variables specific to each type of a source file
>>> +  DEPENDFLAGS = $(DEPENDFLAGS.cpp) $(value DEPENDFLAGS$(AS_EXT))
>>> +else
>>> +  DEPENDFLAGS.cpp := $(DEPENDFLAGS)
>>> +  DEPENDFLAGS.S   := $(DEPENDFLAGS)
>>> +  DEPENDFLAGS.s   := $(DEPENDFLAGS)
>>> +endif
>>> +
>>> +ifneq ($(DEPENDFLAGS),)
>>> +
>>> +# set depsuffix to the suffix of the first prerequisite
>>> +$(DEPENDDIR)/%.d: depsuffix = $(suffix $<)
>>> +
>>> +  ifneq ($(DEPENDFLAGS.cpp),)
>>> +
>>>  # rule to make dependencies for C++ source files
>>>  $(DEPENDDIR)/%.d: %.cpp $(DEPENDDIR)
>>>      $(makedep)
>>>  
>>> +  endif   # DEPENDFLAGS.cpp
>>> +  ifneq ($(value DEPENDFLAGS$(AS_EXT)),)
>>> +
>>>  # rule to make dependencies for assembly files
>>>  $(DEPENDDIR)/%.d: %$(AS_EXT) $(DEPENDDIR)
>>>      $(makedep)
>>>  
>>> +  endif   # DEPENDFLAGS.as
>>>  
>>>  else   # ifeq ($(DEPENDFLAGS),)
>>>  
>>>
>>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp?rev=569584&r1=569583&r2=569584&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp (original)
>>> +++ incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp Fri Aug
>>> 24 17:29:23 2007
>>> @@ -336,14 +336,14 @@
>>>  
>>>  #ifndef _RWSTD_NO_WCHAR_T
>>>  
>>> -    printf ("#define _RWSTD_WCHAR_SIZE  %2u /* sizeof (wchar_t) */\n",
>>> +    printf ("#define _RWSTD_WCHAR_T_SIZE  %2u /* sizeof (wchar_t) */\n",
>>>              SIZEOF (wchar_t));
>>>  
>>>      const char *suffix = "U";
>>>      if ((wchar_t)~0 < (wchar_t)0)
>>>          suffix = "";
>>>      -    MKLIMITS (wchar_t, "WCHAR", suffix, "wchar_t");
>>> +    MKLIMITS (wchar_t, "WCHAR_T", suffix, "wchar_t");
>>>  
>>>  #endif   // _RWSTD_NO_WCHAR_T
>>>  
>>>
>>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config?rev=569584&r1=569583&r2=569584&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config (original)
>>> +++ incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config Fri Aug
>>> 24 17:29:23 2007
>>> @@ -10,9 +10,24 @@
>>>  
>>>  # extract the "C++ m.n" substring from version string (whcih changes
>>>  # from one release of the compiler to another)
>>> -CCVER          := $(shell $(CXX) -V 2>&1 | head -n1 | sed 's/.*C\+\+
>>> *\([^ ]*\).*/\1/')
>>> +CCVER          := $(shell   $(CXX) -V 2>&1 | head -n1 \
>>> +                          | sed 's/.*C\+\+ *\([^ ]*\).*/\1/')
>>> +CCMAJOR        := $(shell echo $(CCVER) | cut -f1 -d'.')
>>> +CCMINOR        := $(shell echo $(CCVER) | cut -f2 -d'.')
>>> +
>>> +ifeq ($(shell expr $(CCMAJOR) = 5 \& $(CCMINOR) = 9),1)   
>>> +  # in Sun C++ 5.9 -xM can only be used with C and C++ files
>>> +  # and it produces the wrong results with .{S,s} files
>>> +  DEPENDFLAGS.cpp = -xM
>>> +
>>> +  # deliberately undefined:
>>> +  # DEPENDFLAGS.S =
>>> +  # DEPENDFLAGS   =
>>> +else
>>> +  DEPENDFLAGS     = -xM
>>> +endif
>>> +
>>>  WARNFLAGS       = +w
>>> -DEPENDFLAGS     = -xM
>>>  PICFLAGS        = -KPIC
>>>  LDSOFLAGS       =  CXXFLAGS        = -library=%none
>>> @@ -77,21 +92,38 @@
>>>  SINGL_CPPFLAGS =
>>>  SINGL_LDFLAGS  =
>>>  
>>> -# (try to) determine the architecture via the (non-standard) -p option
>>> -# recognized on (at least) Linux and Solaris
>>> -arch=$(shell uname -p 2>/dev/null)
>>> -
>>> -ifeq ($(arch),sparc)
>>> -    # wide (64-bit) flags -- must be set explicitly
>>> -    # narrow (32-bit) flags are implicit on SPARC
>>> -    wide_flags     = -xarch=v9
>>> -    narrow_flags   = -xarch=v8
>>> +ifeq ($(shell expr $(CCMAJOR) \>= 5 \& $(CCMINOR) \>= 9),1)
>>> +
>>> +    # starting with Sun C++ 5.9, the compiler prefers the generic
>>> +    # -m32 and -m64 options to the architecture specific -xarch
>>> +    # options some of which have been deprecated
>>> +    wide_flags   = -m64
>>> +    narrow_flags = -m32
>>>  else
>>> -    # wide (64-bit) flags -- must be set explicitly
>>> -    # narrow (32-bit) flags are implicit on AMD64
>>> -    ifeq ($(arch),amd64)
>>> -        wide_flags     = -xarch=amd64
>>> -        narrow_flags   =
>>> +    # (try to) determine the architecture via the (non-standard)
>>> +    # -p option recognized on (at least) Linux and Solaris
>>> +    arch := $(shell uname -p 2>/dev/null)
>>> +
>>> +    ifeq ($(arch),sparc)
>>> +        # wide (64-bit) flags -- must be set explicitly
>>> +        # narrow (32-bit) flags are implicit on SPARC
>>> +        wide_flags   = -xarch=v9
>>> +        narrow_flags = -xarch=v8
>>> +    else
>>> +        # wide (64-bit) flags -- must be set explicitly
>>> +        # narrow (32-bit) flags are implicit on AMD64
>>> +        ifeq ($(OSNAME),SunOS)
>>> +            # Solaris uname -p prints i386 on AMD64, use the optisa
>>> +            # command to deterrmine "the best" architecture
>>> +            arch := $(shell optisa amd64)
>>> +        endif
>>> +        ifeq ($(arch),amd64)
>>> +            wide_flags   = -xarch=amd64
>>> +            narrow_flags = -xarch=386 # the default (same as generic)
>>> +        else
>>> +            wide_flags   = -xarch=generic64
>>> +            narrow_flags = -xarch=generic # the default (same as 386)
>>> +        endif
>>>      endif
>>>  endif
>>>  
>>>
>>>


Re: svn commit: r569584 - in /incubator/stdcxx/branches/4.2.0: GNUmakefile etc/config/GNUmakefile.cfg etc/config/makefile.rules etc/config/src/LIMITS.cpp etc/config/sunpro.config

Posted by Andrew Black <ab...@roguewave.com>.
*shrugs*

I normally don't work with any part of subversion other than trunk, so
I'm not as familiar with the procedures for working on the branches.  I
suppose I should have sent the proposed patch to the list while I was
running the couple sanity builds, but I was more concerned with trying
to get things recovered from the bad merge, along with other internal work.

The nightly testing sources need to be updated for the 4.2.0 release
branch, but provided we get decent results out of it I'm thinking we'll
probably end up tagging it as -rc2.

--Andrew Black

Martin Sebor wrote:
> ablack@apache.org wrote:
>> Author: ablack
>> Date: Fri Aug 24 17:29:23 2007
>> New Revision: 569584
>>
>> URL: http://svn.apache.org/viewvc?rev=569584&view=rev
>> Log:
>> 2007-08-24  Andrew Black  <ab...@roguewave.com>
>>
>>     STDCXX-470
>>     STDCXX-479
>>     STDCXX-481
> 
> FWIW, this change doesn't fix these bugs, it just integrates
> the already committed fixes to the [pre]release branch. So,
> IMO, the bugs shouldn't be referenced here. The main reason
> why I think it's wrong is because this commit is now recorded
> in each of the issues, giving the impression that it's a patch
> necessary to fix the bugs.
> 
> In addition, quoting from the Committers section of our page
> (http://incubator.apache.org/stdcxx/#committers), the policy
> that we all voted in is:
> 
>   "For potentially unsafe changes or any changes to branches
>   all stdcxx committers follow the Review-Then-Commit policy
>  (RTC for short)."
> 
> Martin
> 
>>     * etc/config/src/LIMITS.cpp: Revert
>>     http://svn.apache.org/viewvc?view=rev&revision=554421 ,
>>     accidentally merged to 4.2.0 prematurely as part of
>>     http://svn.apache.org/viewvc?view=rev&revision=569152 .
>>     * GNUmakefile: Deploy
>>     http://svn.apache.org/viewcvs?view=rev&rev=555061 to enable
>>     building with Sun C++ 5.9 (Sun Studio 12).
>>     * etc/config/GNUmakefile.cfg: Ditto.
>>     * etc/config/sunpro.config: Ditto.
>>     * etc/config/makefile.rules: Ditto.
>>
>> Modified:
>>     incubator/stdcxx/branches/4.2.0/GNUmakefile
>>     incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
>>     incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
>>     incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
>>     incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
>>
>> Modified: incubator/stdcxx/branches/4.2.0/GNUmakefile
>> URL:
>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/GNUmakefile?rev=569584&r1=569583&r2=569584&view=diff
>>
>> ==============================================================================
>>
>> --- incubator/stdcxx/branches/4.2.0/GNUmakefile (original)
>> +++ incubator/stdcxx/branches/4.2.0/GNUmakefile Fri Aug 24 17:29:23 2007
>> @@ -588,7 +588,10 @@
>>            && echo "PICFLAGS   = $(PICFLAGS)"             >>
>> $(MAKEFILE_IN)  \
>>            && echo "CPPFLAGS   = $(CPPFLAGS)"             >>
>> $(MAKEFILE_IN)  \
>>            && echo "WARNFLAGS  = $(WARNFLAGS)"            >>
>> $(MAKEFILE_IN)  \
>> -          && echo "DEPENDFLAGS = $(DEPENDFLAGS)"         >>
>> $(MAKEFILE_IN)  \
>> +          && echo "DEPENDFLAGS     = $(DEPENDFLAGS)"     >>
>> $(MAKEFILE_IN)  \
>> +          && echo "DEPENDFLAGS.cpp = $(DEPENDFLAGS.cpp)" >>
>> $(MAKEFILE_IN)  \
>> +          && echo "DEPENDFLAGS$(AS_EXT) = $(value
>> DEPENDFLAGS$(AS_EXT))"    \
>> +                                                         >>
>> $(MAKEFILE_IN)  \
>>            && echo "AS_EXT     = $(AS_EXT)"               >>
>> $(MAKEFILE_IN)  \
>>            && echo "LD         = $(LD)"                   >>
>> $(MAKEFILE_IN)  \
>>            && echo "LDFLAGS    = $(LDFLAGS)"              >>
>> $(MAKEFILE_IN)  \
>>
>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg
>> URL:
>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg?rev=569584&r1=569583&r2=569584&view=diff
>>
>> ==============================================================================
>>
>> --- incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg (original)
>> +++ incubator/stdcxx/branches/4.2.0/etc/config/GNUmakefile.cfg Fri Aug
>> 24 17:29:23 2007
>> @@ -145,6 +145,11 @@
>>  # (re)create config.h; do not change timestamp if the new file is the
>> same
>>  # make .o first to make sure the %.o: %.cpp rule gets invoked (make
>> bug?)
>>  # run a configure script as the last step (e.g., to remove unwanted
>> files)
>> +
>> +# creates a file named vars.sh, containing shell assignments
>> corresponding
>> +# to makefile variables defined in $(BUILDDIR)/makefile.in (variables
>> with
>> +# invalid names (those containing periods) are commented out);
>> vars.sh is
>> +# used in libc_decl.sh to invoke the compiler and linker
>>  config: clean sane      @([ -f config.h ] && mv config.h config.h.~
>> ;                       \
>>            echo "// configured for $(CCNAME) on `uname -sr`" >config.h
>> ;     \
>> @@ -163,6 +168,7 @@
>>                    if [ ! -f vars.sh ] ;
>> then                                \
>>                        cat
>> ../makefile.in                                    \
>>                        | sed -e "s/= *\([^ ][^ ]*
>> .*\)/=\"\1\"/"             \
>> +                            -e "s/^\( *[^=]*\.[^=]*=.*\)/#
>> \1/"             \
>>                              -e "s/^\([^ ]*\) *= *\(.*\)/\1=\2 ;
>> export \1/" \
>>                              -e 's/$$(\([^)]*\))/${\1}/g' >vars.sh
>> ;         \
>>                    fi
>> ;                                                      \
>>
>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules
>> URL:
>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules?rev=569584&r1=569583&r2=569584&view=diff
>>
>> ==============================================================================
>>
>> --- incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules (original)
>> +++ incubator/stdcxx/branches/4.2.0/etc/config/makefile.rules Fri Aug
>> 24 17:29:23 2007
>> @@ -119,8 +119,9 @@
>>         
>> PATH=$$PATH:.;                                                    \
>>         
>> TOPDIR=$(TOPDIR);                                                 \
>>         
>> TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
>> +       
>> TZ=MST+7;                                                         \
>>          export
>> TMP;                                                       \
>> -        export LD_LIBRARY_PATH PATH TMP
>> TOPDIR;                           \
>> +        export LD_LIBRARY_PATH PATH TMP TOPDIR
>> TZ;                        \
>>          trap "rm -rf $$TMP" HUP INT QUIT TERM
>> EXIT;                       \
>>          mkdir -p
>> $$TMP;                                                   \
>>          ./run $(RUNFLAGS)
>> $(RUNTARGET);                                   \
>> @@ -133,8 +134,9 @@
>>         
>> PATH=$$PATH:$(LIBDIR):.;                                          \
>>         
>> TOPDIR=$(TOPDIR);                                                 \
>>         
>> TMP=$${TMP:-/tmp}/stdcxx-run-$$$$;                                \
>> +       
>> TZ=MST+7;                                                         \
>>          export
>> TMP;                                                       \
>> -        export LD_LIBRARY_PATH PATH TMP
>> TOPDIR;                           \
>> +        export LD_LIBRARY_PATH PATH TMP TOPDIR
>> TZ;                        \
>>          trap "rm -rf $$TMP" HUP INT QUIT TERM
>> EXIT;                       \
>>          mkdir -p
>> $$TMP;                                                   \
>>          ./run $(RUNFLAGS)
>> $(RUNTARGET);                                   \
>> @@ -164,8 +166,6 @@
>>  endif   # eq ($(findstring clean,$(MAKECMDGOALS)),)
>>  
>>  
>> -ifneq ($(DEPENDFLAGS),)
>> -
>>  # generate dependencies only if they don't yet exist, removing anything
>>  # not under $(TOPDIR) or $(BUILDDIR) (e.g., system headers) from the
>> list
>>  # this is done by splitting up dependencies using tr so that there is
>> just
>> @@ -186,8 +186,9 @@
>>                    
>> s:$$RWTSRCDIR:$$""(TOPDIR)/\.\./rwtest:gp;                \
>>                    
>> s:$(TOPDIR):$$""(TOPDIR):gp;                              \
>>                     s:$(BUILDDIR):$$""(BUILDDIR):gp"
>> ;                        \
>> -                                                                            
>> \
>> -           $(CXX) $(DEPENDFLAGS) $(CPPFLAGS) $(CXXFLAGS)
>> $<                  \
>> +       depflags="$(value
>> DEPENDFLAGS$(depsuffix))";                      \
>> +           echo "$(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS)
>> $<";              \
>> +           $(CXX) $$depflags $(CPPFLAGS) $(CXXFLAGS)
>> $<                      \
>>                 | sed "$$sedexp1" | tr "@" "\n" | sed -n "$$sedexp2"
>> >$@ ;    \
>>             if [ ! -s $@ ];
>> then                                              \
>>                
>> depfile=$*.u;                                                 \
>> @@ -205,14 +206,36 @@
>>  $(DEPENDDIR):
>>      @[ ! -d $(DEPENDDIR) ] && mkdir -p $(DEPENDDIR)
>>  
>> +
>> +ifeq ($(DEPENDFLAGS),)
>> +  # if DEPENDFLAGS is empty or not defined, set it to the concatenation
>> +  # of the variables specific to each type of a source file
>> +  DEPENDFLAGS = $(DEPENDFLAGS.cpp) $(value DEPENDFLAGS$(AS_EXT))
>> +else
>> +  DEPENDFLAGS.cpp := $(DEPENDFLAGS)
>> +  DEPENDFLAGS.S   := $(DEPENDFLAGS)
>> +  DEPENDFLAGS.s   := $(DEPENDFLAGS)
>> +endif
>> +
>> +ifneq ($(DEPENDFLAGS),)
>> +
>> +# set depsuffix to the suffix of the first prerequisite
>> +$(DEPENDDIR)/%.d: depsuffix = $(suffix $<)
>> +
>> +  ifneq ($(DEPENDFLAGS.cpp),)
>> +
>>  # rule to make dependencies for C++ source files
>>  $(DEPENDDIR)/%.d: %.cpp $(DEPENDDIR)
>>      $(makedep)
>>  
>> +  endif   # DEPENDFLAGS.cpp
>> +  ifneq ($(value DEPENDFLAGS$(AS_EXT)),)
>> +
>>  # rule to make dependencies for assembly files
>>  $(DEPENDDIR)/%.d: %$(AS_EXT) $(DEPENDDIR)
>>      $(makedep)
>>  
>> +  endif   # DEPENDFLAGS.as
>>  
>>  else   # ifeq ($(DEPENDFLAGS),)
>>  
>>
>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp
>> URL:
>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp?rev=569584&r1=569583&r2=569584&view=diff
>>
>> ==============================================================================
>>
>> --- incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp (original)
>> +++ incubator/stdcxx/branches/4.2.0/etc/config/src/LIMITS.cpp Fri Aug
>> 24 17:29:23 2007
>> @@ -336,14 +336,14 @@
>>  
>>  #ifndef _RWSTD_NO_WCHAR_T
>>  
>> -    printf ("#define _RWSTD_WCHAR_SIZE  %2u /* sizeof (wchar_t) */\n",
>> +    printf ("#define _RWSTD_WCHAR_T_SIZE  %2u /* sizeof (wchar_t) */\n",
>>              SIZEOF (wchar_t));
>>  
>>      const char *suffix = "U";
>>      if ((wchar_t)~0 < (wchar_t)0)
>>          suffix = "";
>>      -    MKLIMITS (wchar_t, "WCHAR", suffix, "wchar_t");
>> +    MKLIMITS (wchar_t, "WCHAR_T", suffix, "wchar_t");
>>  
>>  #endif   // _RWSTD_NO_WCHAR_T
>>  
>>
>> Modified: incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config
>> URL:
>> http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config?rev=569584&r1=569583&r2=569584&view=diff
>>
>> ==============================================================================
>>
>> --- incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config (original)
>> +++ incubator/stdcxx/branches/4.2.0/etc/config/sunpro.config Fri Aug
>> 24 17:29:23 2007
>> @@ -10,9 +10,24 @@
>>  
>>  # extract the "C++ m.n" substring from version string (whcih changes
>>  # from one release of the compiler to another)
>> -CCVER          := $(shell $(CXX) -V 2>&1 | head -n1 | sed 's/.*C\+\+
>> *\([^ ]*\).*/\1/')
>> +CCVER          := $(shell   $(CXX) -V 2>&1 | head -n1 \
>> +                          | sed 's/.*C\+\+ *\([^ ]*\).*/\1/')
>> +CCMAJOR        := $(shell echo $(CCVER) | cut -f1 -d'.')
>> +CCMINOR        := $(shell echo $(CCVER) | cut -f2 -d'.')
>> +
>> +ifeq ($(shell expr $(CCMAJOR) = 5 \& $(CCMINOR) = 9),1)   
>> +  # in Sun C++ 5.9 -xM can only be used with C and C++ files
>> +  # and it produces the wrong results with .{S,s} files
>> +  DEPENDFLAGS.cpp = -xM
>> +
>> +  # deliberately undefined:
>> +  # DEPENDFLAGS.S =
>> +  # DEPENDFLAGS   =
>> +else
>> +  DEPENDFLAGS     = -xM
>> +endif
>> +
>>  WARNFLAGS       = +w
>> -DEPENDFLAGS     = -xM
>>  PICFLAGS        = -KPIC
>>  LDSOFLAGS       =  CXXFLAGS        = -library=%none
>> @@ -77,21 +92,38 @@
>>  SINGL_CPPFLAGS =
>>  SINGL_LDFLAGS  =
>>  
>> -# (try to) determine the architecture via the (non-standard) -p option
>> -# recognized on (at least) Linux and Solaris
>> -arch=$(shell uname -p 2>/dev/null)
>> -
>> -ifeq ($(arch),sparc)
>> -    # wide (64-bit) flags -- must be set explicitly
>> -    # narrow (32-bit) flags are implicit on SPARC
>> -    wide_flags     = -xarch=v9
>> -    narrow_flags   = -xarch=v8
>> +ifeq ($(shell expr $(CCMAJOR) \>= 5 \& $(CCMINOR) \>= 9),1)
>> +
>> +    # starting with Sun C++ 5.9, the compiler prefers the generic
>> +    # -m32 and -m64 options to the architecture specific -xarch
>> +    # options some of which have been deprecated
>> +    wide_flags   = -m64
>> +    narrow_flags = -m32
>>  else
>> -    # wide (64-bit) flags -- must be set explicitly
>> -    # narrow (32-bit) flags are implicit on AMD64
>> -    ifeq ($(arch),amd64)
>> -        wide_flags     = -xarch=amd64
>> -        narrow_flags   =
>> +    # (try to) determine the architecture via the (non-standard)
>> +    # -p option recognized on (at least) Linux and Solaris
>> +    arch := $(shell uname -p 2>/dev/null)
>> +
>> +    ifeq ($(arch),sparc)
>> +        # wide (64-bit) flags -- must be set explicitly
>> +        # narrow (32-bit) flags are implicit on SPARC
>> +        wide_flags   = -xarch=v9
>> +        narrow_flags = -xarch=v8
>> +    else
>> +        # wide (64-bit) flags -- must be set explicitly
>> +        # narrow (32-bit) flags are implicit on AMD64
>> +        ifeq ($(OSNAME),SunOS)
>> +            # Solaris uname -p prints i386 on AMD64, use the optisa
>> +            # command to deterrmine "the best" architecture
>> +            arch := $(shell optisa amd64)
>> +        endif
>> +        ifeq ($(arch),amd64)
>> +            wide_flags   = -xarch=amd64
>> +            narrow_flags = -xarch=386 # the default (same as generic)
>> +        else
>> +            wide_flags   = -xarch=generic64
>> +            narrow_flags = -xarch=generic # the default (same as 386)
>> +        endif
>>      endif
>>  endif
>>  
>>
>>
>