Processing Embedded SQL Programs
+ You can
+ use pg_configpg_configwith
+ ecpg
+ or pkg-configpkg-configwith
+ ecpg with package name libecpg to
+ get the paths for your installation.
+
+
+
If you manage the build process of a larger project using
make, it might be convenient to include
the following implicit rule to your makefiles:
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
index aa2ec2a..1794f9b 100644
--- a/doc/src/sgml/libpq.sgml
+++ b/doc/src/sgml/libpq.sgml
@@ -7641,6 +7641,18 @@ Building libpq Programs
+ If you
+ have pkg-configpkg-configwith
+ libpq installed, you can run instead:
+
+$ pkg-config --cflags libpq
+-I/usr/local/include
+
+ Note that this will already include the in front of
+ the path.
+
+
+
Failure to specify the correct option to the compiler will
result in an error message such as:
@@ -7675,6 +7687,15 @@ Building libpq Programs
+ Or again use pkg-config:
+
+$ pkg-config --libs libpq
+-L/usr/local/pgsql/lib -lpq
+
+ Note again that this prints the full options, not only the path.
+
+
+
Error messages that point to problems in this area could look like
the following:
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 4da2f10..2527fe9 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -87,6 +87,7 @@ shlib_bare = lib$(NAME)$(DLSUFFIX)
# Testing the soname variable is a reliable way to determine whether a
# linkable library is being built.
soname = $(shlib_major)
+pkgconfigdir = $(libdir)/pkgconfig
else
# Naming convention for dynamically loadable modules
shlib = $(NAME)$(DLSUFFIX)
@@ -305,6 +306,7 @@ all-lib: all-shared-lib
ifdef soname
# no static library when building a dynamically loadable module
all-lib: all-static-lib
+all-lib: lib$(NAME).pc
endif
all-static-lib: $(stlib)
@@ -388,6 +390,25 @@ $(stlib): $(shlib) $(DLL_DEFFILE) | $(SHLIB_PREREQS)
endif # PORTNAME == cygwin || PORTNAME == win32
+%.pc: $(MAKEFILE_LIST)
+ echo 'Name: lib$(NAME)' >$@
+ echo 'Description: PostgreSQL lib$(NAME) library' >>$@
+ echo 'Url: http://www.postgresql.org/' >>$@
+ echo 'Version: $(VERSION)' >>$@
+ echo 'Requires: ' >>$@
+ echo 'Requires.private: $(PKG_CONFIG_REQUIRES_PRIVATE)' >>$@
+# Record -I flags that the user might have passed in to the PostgreSQL
+# build to locate third-party libraries (e.g., ldap, ssl). Filter out
+# those that point inside the build or source tree. Use sort to
+# remove duplicates.
+ echo 'Cflags: -I$(includedir) $(sort $(filter-out -I.% -I$(top_srcdir)/%,$(filter -I%,$(CPPFLAGS))))' >>$@
+ echo 'Libs: -L$(libdir) -l$(NAME)' >>$@
+# Record -L flags, as above for Cflags. Also record the -l flags
+# necessary for static linking, but not those already covered by
+# Requires.private.
+ echo 'Libs.private: $(sort $(filter-out -L.% -L$(top_srcdir)/%,$(filter -L%,$(LDFLAGS) $(SHLIB_LINK)))) $(filter-out $(PKG_CONFIG_REQUIRES_PRIVATE:lib%=-l%),$(filter -l%,$(SHLIB_LINK)))' >>$@
+
+
# We need several not-quite-identical variants of .DEF files to build
# DLLs for Windows. These are made from the single source file
# exports.txt. Since we can't assume that Windows boxes will have
@@ -430,8 +451,12 @@ endif # SHLIB_EXPORTS
install-lib: install-lib-shared
ifdef soname
install-lib: install-lib-static
+install-lib: install-lib-pc
endif
+install-lib-pc: lib$(NAME).pc installdirs-lib
+ $(INSTALL_DATA) $< '$(DESTDIR)$(pkgconfigdir)/lib$(NAME).pc'
+
install-lib-static: $(stlib) installdirs-lib
$(INSTALL_STLIB) $< '$(DESTDIR)$(libdir)/$(stlib)'
ifeq ($(PORTNAME), darwin)
@@ -467,7 +492,7 @@ endif
installdirs-lib:
ifdef soname
- $(MKDIR_P) '$(DESTDIR)$(libdir)'
+ $(MKDIR_P) '$(DESTDIR)$(libdir)' '$(DESTDIR)$(pkgconfigdir)'
else
$(MKDIR_P) '$(DESTDIR)$(pkglibdir)'
endif
@@ -483,7 +508,8 @@ ifdef soname
rm -f '$(DESTDIR)$(libdir)/$(stlib)'
rm -f '$(DESTDIR)$(libdir)/$(shlib_bare)' \
'$(DESTDIR)$(libdir)/$(shlib_major)' \
- '$(DESTDIR)$(libdir)/$(shlib)'
+ '$(DESTDIR)$(libdir)/$(shlib)' \
+ '$(DESTDIR)$(pkgconfigdir)/lib$(NAME).pc'
else # no soname
rm -f '$(DESTDIR)$(pkglibdir)/$(shlib)'
endif # no soname
@@ -495,7 +521,7 @@ endif # no soname
.PHONY: clean-lib
clean-lib:
- rm -f $(shlib) $(shlib_bare) $(shlib_major) $(stlib) $(exports_file)
+ rm -f $(shlib) $(shlib_bare) $(shlib_major) $(stlib) $(exports_file) lib$(NAME).pc
ifneq (,$(SHLIB_EXPORTS))
maintainer-clean-lib:
diff --git a/src/interfaces/ecpg/compatlib/Makefile b/src/interfaces/ecpg/compatlib/Makefile
index 00adcdb..6ae1493 100644
--- a/src/interfaces/ecpg/compatlib/Makefile
+++ b/src/interfaces/ecpg/compatlib/Makefile
@@ -18,10 +18,10 @@ SO_MAJOR_VERSION= 3
SO_MINOR_VERSION= 5
override CPPFLAGS := -I../include -I$(top_srcdir)/src/interfaces/ecpg/include \
- -I$(libpq_srcdir) -I$(top_srcdir)/src/include/utils $(CPPFLAGS)
+ -I$(top_srcdir)/src/include/utils $(CPPFLAGS)
override CFLAGS += $(PTHREAD_CFLAGS)
-SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \
+SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes \
$(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS)
SHLIB_PREREQS = submake-ecpglib submake-pgtypeslib
@@ -32,6 +32,8 @@ LIBS := $(filter-out -lpgport, $(LIBS))
OBJS= informix.o $(filter snprintf.o, $(LIBOBJS))
+PKG_CONFIG_REQUIRES_PRIVATE = libecpg libpgtypes
+
all: all-lib
.PHONY: submake-ecpglib submake-pgtypeslib
diff --git a/src/interfaces/ecpg/ecpglib/Makefile b/src/interfaces/ecpg/ecpglib/Makefile
index 59d9caf..90d4b3e 100644
--- a/src/interfaces/ecpg/ecpglib/Makefile
+++ b/src/interfaces/ecpg/ecpglib/Makefile
@@ -43,6 +43,8 @@ ifeq ($(PORTNAME), win32)
SHLIB_LINK += -lshfolder
endif
+PKG_CONFIG_REQUIRES_PRIVATE = libpq libpgtypes
+
all: all-lib
.PHONY: submake-pgtypeslib