mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-28 11:55:03 +03:00 
			
		
		
		
	We were being careless in some places about the order of -L switches in link command lines, such that -L switches referring to external directories could come before those referring to directories within the build tree. This made it possible to accidentally link a system-supplied library, for example /usr/lib/libpq.so, in place of the one built in the build tree. Hilarity ensued, the more so the older the system-supplied library is. To fix, break LDFLAGS into two parts, a sub-variable LDFLAGS_INTERNAL and the main LDFLAGS variable, both of which are "recursively expanded" so that they can be incrementally adjusted by different makefiles. Establish a policy that -L switches for directories in the build tree must always be added to LDFLAGS_INTERNAL, while -L switches for external directories must always be added to LDFLAGS. This is sufficient to ensure a safe search order. For simplicity, we typically also put -l switches for the respective libraries into those same variables. (Traditional make usage would have us put -l switches into LIBS, but cleaning that up is a project for another day, as there's no clear need for it.) This turns out to also require separating SHLIB_LINK into two variables, SHLIB_LINK and SHLIB_LINK_INTERNAL, with a similar rule about which switches go into which variable. And likewise for PG_LIBS. Although this change might appear to affect external users of pgxs.mk, I think it doesn't; they shouldn't have any need to touch the _INTERNAL variables. In passing, tweak src/common/Makefile so that the value of CPPFLAGS recorded in pg_config lacks "-DFRONTEND" and the recorded value of LDFLAGS lacks "-L../../../src/common". Both of those things are mistakes, apparently introduced during prior code rearrangements, as old versions of pg_config don't print them. In general we don't want anything that's specific to the src/common subdirectory to appear in those outputs. This is certainly a bug fix, but in view of the lack of field complaints, I'm unsure whether it's worth the risk of back-patching. In any case it seems wise to see what the buildfarm makes of it first. Discussion: https://postgr.es/m/25214.1522604295@sss.pgh.pa.us
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # contrib/jsonb_plpython/Makefile
 | |
| 
 | |
| MODULE_big = jsonb_plpython$(python_majorversion)
 | |
| OBJS = jsonb_plpython.o $(WIN32RES)
 | |
| PGFILEDESC = "jsonb_plpython - transform between jsonb and plpythonu"
 | |
| 
 | |
| PG_CPPFLAGS = -I$(top_srcdir)/src/pl/plpython $(python_includespec) -DPLPYTHON_LIBNAME='"plpython$(python_majorversion)"'
 | |
| 
 | |
| EXTENSION = jsonb_plpythonu jsonb_plpython2u jsonb_plpython3u
 | |
| DATA = jsonb_plpythonu--1.0.sql jsonb_plpython2u--1.0.sql jsonb_plpython3u--1.0.sql
 | |
| 
 | |
| REGRESS = jsonb_plpython
 | |
| REGRESS_PLPYTHON3_MANGLE := $(REGRESS)
 | |
| 
 | |
| ifdef USE_PGXS
 | |
| PG_CONFIG = pg_config
 | |
| PGXS := $(shell $(PG_CONFIG) --pgxs)
 | |
| include $(PGXS)
 | |
| else
 | |
| subdir = contrib/jsonb_plpython
 | |
| top_builddir = ../..
 | |
| include $(top_builddir)/src/Makefile.global
 | |
| include $(top_srcdir)/contrib/contrib-global.mk
 | |
| endif
 | |
| 
 | |
| # We must link libpython explicitly
 | |
| ifeq ($(PORTNAME), win32)
 | |
| # ... see silliness in plpython Makefile ...
 | |
| SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
 | |
| else
 | |
| rpathdir = $(python_libdir)
 | |
| SHLIB_LINK += $(python_libspec) $(python_additional_libs)
 | |
| endif
 | |
| 
 | |
| ifeq ($(python_majorversion),2)
 | |
| REGRESS_OPTS += --load-extension=plpythonu --load-extension=jsonb_plpythonu
 | |
| endif
 | |
| 
 | |
| include $(top_srcdir)/src/pl/plpython/regress-python3-mangle.mk
 |