On Sat, Nov 7, 2009 at 6:09 PM, Garrett Cooper <[email protected]> wrote:
> On Fri, Nov 6, 2009 at 4:54 PM, Garrett Cooper <[email protected]> wrote:
>> On Fri, Nov 6, 2009 at 4:52 PM, Garrett Cooper <[email protected]> wrote:
>>> On Fri, Nov 6, 2009 at 4:23 PM, Mike Frysinger <[email protected]> wrote:
>>>> On Friday 06 November 2009 18:34:22 Matt Helsley wrote:
>>>>> On Fri, Nov 06, 2009 at 06:09:04PM -0500, Mike Frysinger wrote:
>>>>> > On Friday 06 November 2009 18:02:31 Matt Helsley wrote:
>>>>> > > On Fri, Nov 06, 2009 at 03:09:02PM -0400, Mike Frysinger wrote:
>>>>> > > > also, i thought we were going to rename the top level Makefile to
>>>>> > > > GNUmakefile and add a dummy Makefile that just spat out "sorry, ltp
>>>>> > > > requires GNU make".
>>>>> > >
>>>>> > > Bleh. Can't we just check the output of $(MAKE) --version rather than
>>>>> > > assume other makes use "Makefile"?
>>>>> >
>>>>> > the assumption is that only GNU make parses "GNUmakefile".  i think
>>>>> > that's a pretty safe assumption.
>>>>>
>>>>> Right, but GNU Make also parses Makefile.
>>>>
>>>> not if a GNUmakefile exists in the same dir, or the user forces the issue 
>>>> via
>>>> the -f flag
>>>>
>>>>> If some poor bastard runs:
>>>>>
>>>>> make -f Makefile
>>>>>
>>>>> where GNU Make is "make" they may be further confused. Seems like it's
>>>>> better to check what's actually running ($(MAKE)) or will run
>>>>> (like `which make` in configure) than rely on a filename hack like this.
>>>>
>>>> said poor bastard should be smacked :p.  checking the value of $(MAKE) wont
>>>> work as it could be an arbitrary number of things which could all be valid
>>>> values under GNU make.  configure checks wont matter because it's the user 
>>>> who
>>>> runs `make` or `gmake` or `make-some-noise`.  requiring `make` to be GNU 
>>>> make
>>>> in configure when the user can easily run `gmake` at make time is pointless
>>>> user interference.
>>>>
>>>> using a different filename on the other hand is exactly what GNU make has
>>>> designed in from the get go specifically for this purpose -- when GNU make 
>>>> is
>>>> required.  if you honestly think people are doing something pointless like
>>>> `make -f Makefile`, then it's trivial to add a check to it to (1) check
>>>> $(MAKE) --version and include GNUmakefile or (2) $(error out).  no point in
>>>> forcing the shell/etc... overhead in the default build for the majority of
>>>> users.
>>>
>>> No, but you can do something like:
>>>
>>> ifdef MAKE_SANITY_CHECK
>>> export MAKE_SANITY_CHECK = 1
>>> ifneq ($(lastword $(sort 3.80 $(MAKE_VERSION))),$(MAKE_VERSION))
>>> $(error Upgrade your junk..)
>>> endif
>>> endif
>>>
>>> that way it only executes this once.
>>
>> Ugh... $(lastword ) didn't exist in 3.80... I'll change it around to
>> $(firstword ).
>
> Crap. So here are some of the high notes for changes between make 3.80 and 
> 3.81:
>
> 1. $(and ) and $(or ) didn't exist [we use $(or ) once]. This can be
> replaced by an `ifeq ($(strip)) else endif'.
> 2. $(abspath ) // $(realpath ) didn't exist [we use $(abspath )
> extensively, but just in one spot -- fixed that, need to test].
> 3. .DEFAULT_GOAL was originally .DEFAULT_TARGET, but DID NOT exist in
> make 3.81 (this is going to be a bloody pain to hack around with,
> maybe -- depends on where I put all:). It'll be like herding cats to
> make sure that other developers don't create targets before the first
> include.
> 4. Secondary expansion was busted as all hell in <3.81 (now this is
> going to be a serious pain point in some areas because I'll have to
> hunt down wherever I used % and $* and adjust things to work with make
> 3.80 -- this mostly affects the top-level Makefile).
> 5. Secondary expansion did NOT exist in static nor implicit rules
> (another pain point -- mostly with the top-level Makefile).
> 6. $(lastword ) didn't exist [can be replaced by $(firstword ) with
> inverse logic, maybe...].
> 7. Some funkiness with how .PHONY was treated:
>
> 2004-09-21  Boris Kolpackov  <[email protected]>
>
>        * file.c (snap_deps): Mark .PHONY prerequisites as targets.
>
> 8. Variable expansion was partially broken [used underlying caller
> from $(subst ) instead of $(patsubst )].
> 9. Now this one flat out spooks me:
>
> 2004-03-20  Paul D. Smith  <[email protected]>
>
> [...]
>
>        * rule.c (count_implicit_rule_limits): Don't delete patterns which
>        refer to absolute pathnames in directories that don't exist: some
>        portion of the makefile could create those directories before we
>        match the pattern.  Fixes bugs #775 and #108.
>
>  This makes me think that out-of-build-tree could be REALLY broken with 3.80.
>
> 10. Ouch -- this is a really f'ed up bug:
>
> 2004-01-07  Paul D. Smith  <[email protected]>
>
> [...]
>
>        * job.c (construct_command_argv_internal): Add "!" to the list of
>        shell escape chars.  POSIX sh allows it to appear before a
>        command, to negate the exit code.  Fixes bug #6404.
>
> 11. Yipes -- this scares me because we do use implicit and pattern rules:
>
> 2003-04-19  Paul D. Smith  <[email protected]>
>
>        Fix bug #1405: allow a target to match multiple pattern-specific
>        variables.
>
>        * rule.c (create_pattern_var, lookup_pattern_var): Move these to
>        variable.c, where they've always belonged.
>        * rule.h: Move the prototypes and struct pattern_var as well.
>        * variable.c (initialize_file_variables): Invoke
>        lookup_pattern_var() in a loop, until no more matches are found.
>        If a match is found, create a new variable set for the target's
>        pattern variables.  Then merge the contents of each matching
>        pattern variable set into the target's pattern variable set.
>        (lookup_pattern_var): Change this function to be usable
>        in a loop.  It takes a starting position: if NULL, start at the
>        beginning; if non-NULL, start with the pattern variable after that
>        position, and return the next matching pattern.
>        (create_pattern_var): Create a unique instance of
>        pattern-specific variables for every definition in the makefile.
>        Don't combine the same pattern together.  This allows us to
>        process the variable handling properly even when the same pattern
>        is used multiple times.
>        (parse_variable_definition): New function: break out the parsing
>        of a variable definition line from try_variable_definition.
>        (try_variable_definition): Call parse_variable_definition to
>        parse.
>        (print_variable_data_base): Print out pattern-specific variables.
>        * variable.h (struct variable): Remember when a variable is
>        conditional.  Also remember its flavor.
>        (struct pattern_var): Instead of keeping a variable set, we just
>        keep a single variable for each pattern.
>        * read.c (record_target_var): Each pattern variable contains only a
>        single variable, not a set, so create it properly.
>        * doc/make.texi (Pattern-specific): Document the new behavior
>
> 12. Hmmm -- this could get nasty:
>
> 2003-01-22  Paul D. Smith  <[email protected]>
>
>        * function.c (func_call): Fix Bug #1744.  If we're inside a
>        recursive invocation of $(call ...), mask any of the outer
>        invocation's arguments that aren't used by this one, so that this
>        invocation doesn't "inherit" them accidentally.
>
> I'm concerned now that this is going to take 4 +/- 1 weekends to
> complete and will be semi-painful to validate... The funny thing is
> that our Makefiles were implementing some of this logic before (in a
> hodgepodge manner), so this maybe some items like these were failing
> in the past but not being caught, or were masked by all of the
> explicit target specifications which are a MFPiTA to maintain.

    I think what I need to do is run some tests in these problem areas
to figure out the gaps, now that I have an inkling of what might be
missing, so I can properly fill in the gaps if I can...
Thanks,
-Garrett

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to