Add pkg-config files for libpq and ecpg libraries
authorPeter Eisentraut
Sun, 31 Mar 2013 20:58:40 +0000 (16:58 -0400)
committerPeter Eisentraut
Sun, 31 Mar 2013 20:58:40 +0000 (16:58 -0400)
This will hopefully be easier to use than pg_config for users who are
already used to the pkg-config interface.  It also works better for
multi-arch installations.

reviewed by Tom Lane

.gitignore
doc/src/sgml/ecpg.sgml
doc/src/sgml/libpq.sgml
src/Makefile.shlib
src/interfaces/ecpg/compatlib/Makefile
src/interfaces/ecpg/ecpglib/Makefile

index 4df314ce305f49fa7ab1a728b8748ee764ab1ad7..8e227a226a97127aa9992fc8add4bca5ebffb722 100644 (file)
@@ -22,6 +22,7 @@ lcov.info
 win32ver.rc
 *.exe
 lib*dll.def
+lib*.pc
 
 # Local excludes in root directory
 /GNUmakefile
index 4d904cdeb8815cbbcdf0c0fd84ade6de8c9830ae..68bcb13ca0424e550a5acb190140fc25018f1397 100644 (file)
@@ -5714,6 +5714,15 @@ cc -o myprog prog1.o prog2.o ... -lecpg
    -L/usr/local/pgsql/lib to that command line.
   
 
+  
+   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
index 1a09c1cb8daee79204f8e865f86d8435f7025755..3b6ada08f7ca6c95efa4994c7c74327b0afbe193 100644 (file)
@@ -7640,6 +7640,18 @@ CPPFLAGS += -I/usr/local/pgsql/include
 
      
 
+     
+      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:
@@ -7674,6 +7686,15 @@ cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
 
      
 
+     
+      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:
index 4da2f10444167fb3b68c5ac4ac2a19a8879f332c..2a0c7a9d017ebdbea45e78594412ee3d7c147073 100644 (file)
@@ -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,23 @@ $(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)' >>$@
+   echo 'Cflags: -I$(includedir)' >>$@
+   echo 'Libs: -L$(libdir) -l$(NAME)' >>$@
+# Record -L 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.  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 +449,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 +490,7 @@ endif
 
 installdirs-lib:
 ifdef soname
-   $(MKDIR_P) '$(DESTDIR)$(libdir)'
+   $(MKDIR_P) '$(DESTDIR)$(libdir)' '$(DESTDIR)$(pkgconfigdir)'
 else
    $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'
 endif
@@ -483,7 +506,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 +519,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:
index 4141e1e0130fe42dcb1ea5fe2b97bca2f95c0d0c..caa55e681617e7eb77c724dc177201028f6e657f 100644 (file)
@@ -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
index 59d9caf71d6850f0b411d2e5ba2add2f54ee63e2..90d4b3e283fcae4d084734bf0149f34617310568 100644 (file)
@@ -43,6 +43,8 @@ ifeq ($(PORTNAME), win32)
 SHLIB_LINK += -lshfolder
 endif
 
+PKG_CONFIG_REQUIRES_PRIVATE = libpq libpgtypes
+
 all: all-lib
 
 .PHONY: submake-pgtypeslib