• Tom Lane's avatar
    Ensure link commands list *.o files before LDFLAGS. · 69ae9dcb
    Tom Lane authored
    It's important for link commands to list *.o input files before -l
    switches for libraries, as library code may not get pulled into the link
    unless referenced by an earlier command-line entry.  This is certainly
    necessary for static libraries (.a style).  Apparently on some platforms
    it is also necessary for shared libraries, as reported by Donald Dong.
    
    We often put -l switches for within-tree libraries into LDFLAGS, meaning
    that link commands that list *.o files after LDFLAGS are hazardous.
    Most of our link commands got this right, but a few did not.  In
    particular, places that relied on gmake's default implicit link rule
    failed, because that puts LDFLAGS first.  Fix that by overriding the
    built-in rule with our own.  The implicit link rules in
    src/makefiles/Makefile.* for single-.o-file shared libraries mostly
    got this wrong too, so fix them.  I also changed the link rules for the
    backend and a couple of other places for consistency, even though they
    are not (currently) at risk because they aren't adding any -l switches
    to LDFLAGS.
    
    Arguably, the real problem here is that we're abusing LDFLAGS by
    putting -l switches in it and we should stop doing that.  But changing
    that would be quite invasive, so I'm not eager to do so.
    
    Perhaps this is a candidate for back-patching, but so far it seems
    that problems can only be exhibited in test code we don't normally
    build, and at least some of the problems are new in HEAD anyway.
    So I'll refrain for now.
    
    Donald Dong and Tom Lane
    
    Discussion: https://postgr.es/m/CAKABAquXn-BF-vBeRZxhzvPyfMqgGuc74p8BmQZyCFDpyROBJQ@mail.gmail.com
    69ae9dcb
Makefile 3.83 KB