1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-31 22:04:40 +03:00

Include directory rearrangement

Client headers are no longer in a subdirectory, since they have been made
namespace-clean.

Internal libpq headers are in a private subdirectory.

Server headers are in a private subdirectory.  pg_config has a new option
to point there.
This commit is contained in:
Peter Eisentraut
2001-08-28 14:20:28 +00:00
parent 3fcea502c4
commit f5944af8ba
9 changed files with 270 additions and 90 deletions

View File

@ -1,4 +1,4 @@
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.50 2001/06/02 18:25:16 petere Exp $ -->
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.51 2001/08/28 14:20:24 petere Exp $ -->
<chapter id="installation">
<title><![%flattext-install-include[<productname>PostgreSQL</>]]>
@ -448,19 +448,29 @@ su - postgres
<note>
<para>
To reduce the pollution of shared installation locations (such
as <filename>/usr/local/include</filename>), the string
<quote><literal>/postgresql</literal></quote> is automatically
appended to <varname>datadir</varname>,
<varname>sysconfdir</varname>, <varname>includedir</varname>,
and <varname>docdir</varname>, unless the fully expanded
directory name already contains the string
<quote>postgres</quote> or <quote>pgsql</quote>. For example,
if you choose <filename>/usr/local</filename> as prefix, the C
header files will be installed in
<filename>/usr/local/include/postgresql</filename>, but if the
prefix is <filename>/opt/postgres</filename>, then they will be
in <filename>/opt/postgres/include</filename>.
Care has been taken to make it possible to install PostgreSQL
into shared installation locations (such as
<filename>/usr/local/include</filename>) without interfering
with the namespace of the rest of the system. First, the
string <quote><literal>/postgresql</literal></quote> is
automatically appended to <varname>datadir</varname>,
<varname>sysconfdir</varname>, and <varname>docdir</varname>,
unless the fully expanded directory name already contains the
string <quote>postgres</quote> or <quote>pgsql</quote>. For
example, if you choose <filename>/usr/local</filename> as
prefix, the documentation will be installed in
<filename>/usr/local/doc/postgresql</filename>, but if the
prefix is <filename>/opt/postgres</filename>, then it will be
in <filename>/opt/postgres/doc</filename>. Second, the
installation layout of the C and C++ header files has been
reorganized in the 7.2 release. The public header files of the
client interfaces are installed into
<varname>includedir</varname> and are namespace-clean. The
internal header files and the server header files are installed
into private directories under
<filename><replaceable>includedir</replaceable>/postgresql</filename>.
See the <citetitle>Programmer's Guide</citetitle> for
information how to get at the header files for each interface.
</para>
</note>
</para>

View File

@ -1,5 +1,5 @@
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.66 2001/08/10 22:50:09 tgl Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.67 2001/08/28 14:20:25 petere Exp $
-->
<chapter id="libpq">
@ -1994,6 +1994,129 @@ call <function>fe_setauthsvc</function> at all.
</sect1>
<sect1 id="libpq-build">
<title>Building Libpq Programs</title>
<para>
To build (i.e., compile and link) your libpq programs you need to
do the following things:
<itemizedlist>
<listitem>
<para>
Include the <filename>libpq-fe.h</filename> header file:
<programlisting>
#include &lt;libpq-fe&gt;
</programlisting>
If you failed to do that then you will normally get error
messages from your compiler, such as
<screen>
foo.c: In function `main':
foo.c:34: `PGconn' undeclared (first use in this function)
foo.c:35: `PGresult' undeclared (first use in this function)
foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
</screen>
</para>
</listitem>
<listitem>
<para>
Point your compiler to the directory where the PostgreSQL header
files were installed, by supplying the
<literal>-I<replaceable>directory</replaceable></literal> option
to your compiler. (In some cases the compiler will look into
the directory in question by default, so you can omit this
option.) For instance, your compile command line could look
like:
<programlisting>
cc -c -I/usr/local/pgsql/include testprog.c
</programlisting>
If you are using makefiles then add the option to the
<varname>CPPFLAGS</varname> variable:
<programlisting>
CPPFLAGS += -I/usr/local/pgsql/include
</programlisting>
</para>
<para>
If there is any chance that your program might be compiled by
other users then you should not hardcode the directory location
like that. Instead, you can run the utility
<command>pg_config</command> to find out where the header files
are on the local system:
<screen>
<prompt>$</prompt> pg_config --includedir
<computeroutput>/usr/local/include</computeroutput>
</screen>
</para>
<para>
Failure to specify the correct option to the compiler will
result in an error message such as
<screen>
testlibpq.c:8:22: libpq-fe.h: No such file or directory
</screen>
</para>
</listitem>
<listitem>
<para>
When linking the final program, specify the option
<literal>-lpq</literal> so that the libpq library gets pulled
in, as well as the option
<literal>-L<replaceable>directory</replaceable></literal> to
point it to the directory where libpq resides. (Again, the
compiler will search some directories by default.) For maximum
portability, put the <option>-L</option> option before the
<option>-lpq</option> option. For example:
<programlisting>
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
</programlisting>
</para>
<para>
You can find out the library directory using
<command>pg_config</command> as well:
<screen>
<prompt>$</prompt> pg_config --libdir
<computeroutput>/usr/local/pgsql/lib</computeroutput>
</screen>
</para>
<para>
Error messages that point to problems in this area could look
like the following.
<screen>
testlibpq.o: In function `main':
testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
testlibpq.o(.text+0x71): undefined reference to `PQstatus'
testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'
</screen>
This means you forgot <option>-lpq</option>.
<screen>
/usr/bin/ld: cannot find -lpq
</screen>
This means you forgot the <option>-L</option> or did not specify
the right path.
</para>
</listitem>
</itemizedlist>
</para>
<para>
If your codes references the header file
<filename>libpq-int.h</filename> and you refuse to fix your code to
not use it, starting in PostgreSQL 7.2, this file will be found in
<filename><replaceable>includedir</replaceable>/postgresql/internal/libpq-int.h</filename>,
so you need to add the appropriate <option>-I</option> option to
your compiler command line.
</para>
</sect1>
<sect1 id="libpq-example">
<title>Example Programs</title>

View File

@ -1,4 +1,4 @@
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_config-ref.sgml,v 1.5 2001/03/05 18:42:56 momjian Exp $ -->
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_config-ref.sgml,v 1.6 2001/08/28 14:20:26 petere Exp $ -->
<refentry id="app-pgconfig">
<docinfo>
@ -22,6 +22,7 @@
<group choice="req" rep="repeat">
<arg>--bindir</arg>
<arg>--includedir</arg>
<arg>--includedir-server</arg>
<arg>--libdir</arg>
<arg>--configure</arg>
<arg>--version</arg>
@ -32,12 +33,17 @@
<refsect1>
<title>Description</>
<para>
The <application>pg_config</> utility provides configuration parameters
The <application>pg_config</> utility prints configuration parameters
of the currently installed version of <productname>PostgreSQL</>. It is
intended, for example, to be used by software packages that want to interface
to <productname>PostgreSQL</> in order to find the respective header files
to <productname>PostgreSQL</> to facilitate finding the required header files
and libraries.
</para>
</refsect1>
<refsect1>
<title>Options</title>
<para>
To use <application>pg_config</>, supply one or more of the following options:
@ -57,7 +63,17 @@
<term>--includedir</>
<listitem>
<para>
Print the location of C and C++ header files.
Print the location of C and C++ header files of the client interfaces.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>--includedir-server</>
<listitem>
<para>
Print the location of C and C++ header files for server
programming.
</para>
</listitem>
</varlistentry>
@ -99,4 +115,42 @@
information is printed in that order, one item per line.
</para>
</refsect1>
<refsect1>
<title>Notes</title>
<para>
The option <option>--includedir-server</option> is new in
PostgreSQL 7.2. In prior releases, the server include files were
installed in the same location as the client headers, which could
be queried with the <option>--includedir</option>. To make your
package handle both cases, try the newer option first and test the
exit status to see whether it succeeded.
</para>
<para>
In releases prior to PostgreSQL 7.1, before the
<command>pg_config</command> came to be, a method for finding the
equivalent configuration information did not exist.
</para>
</refsect1>
<refsect1>
<title>History</title>
<para>
The <command>pg_config</command> utility first appeared in PostgreSQL 7.1.
</para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>
<citetitle>PostgreSQL Programmer's Guide</citetitle>
</para>
</refsect1>
</refentry>

View File

@ -1,5 +1,5 @@
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.32 2001/05/19 09:01:10 petere Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.33 2001/08/28 14:20:26 petere Exp $
-->
<chapter id="xfunc">
@ -1203,13 +1203,16 @@ LANGUAGE 'c';
<itemizedlist>
<listitem>
<para>
The relevant header (include) files are installed under
<filename>/usr/local/pgsql/include</filename> or equivalent.
You can use <literal>pg_config --includedir</literal> to find
out where it is on your system (or the system that your
users will be running on). For very low-level work you might
need to have a complete <productname>PostgreSQL</productname>
source tree available.
Use <literal>pg_config --includedir-server</literal> to find
out where the PostgreSQL server header files are installed on
your system (or the system that your users will be running
on). This option is new with PostgreSQL 7.2. For PostgreSQL
7.1 you should use the option <option>--includedir</option>.
(<command>pg_config</command> will exit with a non-zero status
if it encounters an unknown option.) For releases prior to
7.1 you will have to guess, but since that was before the
current calling conventions were introduced, it is unlikely
that you want to support those releases.
</para>
</listitem>