From cba6ffaef3987211fb31ba869eb2a476bad6f6d3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 Feb 2014 12:10:52 -0500 Subject: [PATCH] Cygwin build fixes. Get rid of use of dlltool for linking the main postgres executable. dlltool is obsolete and we'd prefer to stop depending on it. Also, include $(LDAP_LIBS_FE) in $(libpq_pgport). (It's not clear that this is really needed, or why it's not a linker bug if it is needed. But reports are that it's needed on current Cygwin.) We might want to back-patch this if it works, but first let's see what the buildfarm thinks. Marco Atzeri --- src/Makefile.global.in | 7 ++++++- src/backend/Makefile | 20 +++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index e0e9b793a25..209d1bdf4dc 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -415,7 +415,12 @@ else libpq_pgport = -L$(top_builddir)/src/common -lpgcommon -L$(top_builddir)/src/port -lpgport $(libpq) endif -# If PGXS is not defined, build libpq and libpgport dependancies as required. +# Cygwin seems to need ldap libraries to be mentioned here, too +ifeq ($(PORTNAME),cygwin) +libpq_pgport += $(LDAP_LIBS_FE) +endif + +# If PGXS is not defined, build libpq and libpgport dependencies as required. # If the build is with PGXS, then these are supposed to be already built and # installed, and we just ensure that the expected files exist. ifndef PGXS diff --git a/src/backend/Makefile b/src/backend/Makefile index 356890df3eb..8afb1893fd1 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -62,18 +62,16 @@ endif ifeq ($(PORTNAME), cygwin) -postgres: $(OBJS) postgres.def libpostgres.a - $(DLLTOOL) --dllname $@$(X) --output-exp $@.exp --def postgres.def - $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) -o $@$(X) -Wl,--base-file,$@.base $@.exp $(call expand_subsys,$(OBJS)) $(LIBS) - $(DLLTOOL) --dllname $@$(X) --base-file $@.base --output-exp $@.exp --def postgres.def - $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) -Wl,--stack,$(WIN32_STACK_RLIMIT) -o $@$(X) $@.exp $(call expand_subsys,$(OBJS)) $(LIBS) - rm -f $@.exp $@.base +postgres: $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) $(export_dynamic) -Wl,--stack,$(WIN32_STACK_RLIMIT) -Wl,--export-all-symbols -Wl,--out-implib=libpostgres.a $(call expand_subsys,$^) $(LIBS) -o $@ -postgres.def: $(OBJS) - $(DLLTOOL) --export-all --output-def $@ $(call expand_subsys,$^) +# There is no correct way to write a rule that generates two files. +# Rules with two targets don't have that meaning, they are merely +# shorthand for two otherwise separate rules. To be safe for parallel +# make, we must chain the dependencies like this. The semicolon is +# important, otherwise make will choose some built-in rule. -libpostgres.a: postgres.def - $(DLLTOOL) --dllname postgres.exe --def postgres.def --output-lib $@ +libpostgres.a: postgres ; endif # cygwin @@ -295,7 +293,7 @@ clean: $(top_builddir)/src/include/utils/fmgroids.h \ $(top_builddir)/src/include/utils/probes.h ifeq ($(PORTNAME), cygwin) - rm -f postgres.dll postgres.def libpostgres.a + rm -f postgres.dll libpostgres.a endif ifeq ($(PORTNAME), win32) rm -f postgres.dll postgres.def libpostgres.a $(WIN32RES)