From dbd8d38fa5f0846974921df62f398cf7e191c862 Mon Sep 17 00:00:00 2001 From: Peter Mount Date: Wed, 26 Apr 2000 05:50:18 +0000 Subject: [PATCH] third attempt --- src/interfaces/Makefile | 322 +++++++++++++++++++++++++++++++++------- 1 file changed, 270 insertions(+), 52 deletions(-) diff --git a/src/interfaces/Makefile b/src/interfaces/Makefile index e2fa6d6e3a..94f0969d34 100644 --- a/src/interfaces/Makefile +++ b/src/interfaces/Makefile @@ -1,65 +1,283 @@ #------------------------------------------------------------------------- # -# Makefile.inc-- -# Makefile for src/bin (utility programs) -# -# Copyright (c) 1994, Regents of the University of California -# +# Makefile +# Makefile for Java JDBC interface # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/interfaces/Makefile,v 1.36 2000/04/23 04:26:31 tgl Exp $ +# $Id: Makefile,v 1.37 2000/04/26 05:50:18 peter Exp $ # #------------------------------------------------------------------------- -SRCDIR= .. -include $(SRCDIR)/Makefile.global +FIND = find +IDL2JAVA = idltojava -fno-cpp -fno-tie +JAR = jar +JAVA = java +JAVAC = javac -g +JAVADOC = javadoc +RM = rm -f +TOUCH = touch +# This defines how to compile a java class +.java.class: + $(JAVAC) $< -# Note: the klugery for perl5 is to ensure that the perl5 shared lib -# gets built with the correct path to the installed location of libpq -# during "make install", but is built against the local tree during -# ordinary building and testing. During install, we must also guard -# against the likelihood that we don't have permissions to install into -# the Perl module library. +.SUFFIXES: .class .java +.PHONY: all clean doc examples msg -.DEFAULT all install clean dep depend distclean: - $(MAKE) -C libpq $@ - $(MAKE) -C ecpg $@ -ifeq ($(HAVE_Cplusplus), true) - $(MAKE) -C libpq++ $@ -else - echo $(HAVE_Cplusplus): No C++ -endif - $(MAKE) -C libpgeasy $@ -ifeq ($(USE_TCL), true) - $(MAKE) -C libpgtcl $@ -endif -ifeq ($(USE_PERL), true) - if [ "$@" = "install" ]; then \ - $(MAKE) $(MFLAGS) install-perl5; \ - else \ - $(MAKE) $(MFLAGS) perl5/Makefile; \ - $(MAKE) $(MFLAGS) -C perl5 $@; \ - fi -endif -ifeq ($(USE_ODBC), true) - $(MAKE) -C odbc $@ -endif +# This is the base directory of the driver. In 7.0, this changed from +# postgresql to org/postgresql +PGBASE = org/postgresql -perl5/Makefile: perl5/Makefile.PL - cd perl5 && $(PERL) Makefile.PL POLLUTE=1 +# In 6.5, the all rule builds the makeVersion class which then calls make using +# the jdbc1 or jdbc2 rules +all: + @echo ------------------------------------------------------------ + @echo Due to problems with some JVMs that dont return a meaningful + @echo version number, we have had to make the choice of what jdbc + @echo version is built as a compile time option. + @echo + @echo If you are using JDK1.1.x, you will need the JDBC1.2 driver. + @echo To compile, type: + @echo " make jdbc1 jar" + @echo + @echo "If you are using JDK1.2 (aka Java2) you need the JDBC2." + @echo To compile, type: + @echo " make jdbc2 jar" + @echo + @echo Once you have done this, a postgresql.jar file will be + @echo produced. This file will only work with that particular + @echo JVM. + @echo + @echo ------------------------------------------------------------ -install-perl5: perl5/Makefile - $(MAKE) -C perl5 clean - cd perl5 && POSTGRES_HOME="$(POSTGRESDIR)" $(PERL) Makefile.PL POLLUTE=1 - $(MAKE) -C perl5 all - -@if [ -w `$(MAKE) --quiet -C perl5 echo-installdir` ]; then \ - $(MAKE) $(MFLAGS) -C perl5 install; \ - rm -f perl5/Makefile; \ - else \ - echo "Skipping install of Perl module for lack of permissions."; \ - echo "To install it, cd into interfaces/perl5, su to become the"; \ - echo "appropriate user, and do '$(MAKE) install'."; \ - fi +msg: + @echo ------------------------------------------------------------ + @echo The JDBC driver has now been built. To make it available to + @echo other applications, copy the postgresql.jar file to a public + @echo "place (under unix this could be /usr/local/lib) and add it" + @echo to the class path. + @echo + @echo Then either add -Djdbc.drivers=postgresql.Driver to the + @echo commandline when running your application, or edit the + @echo "properties file for your application (~/.hotjava/properties" + @echo "under unix for HotJava), and add a line containing" + @echo jdbc.drivers=postgresql.Driver + @echo + @echo More details are in the README file and in the main postgresql + @echo documentation. + @echo + @echo ------------------------------------------------------------ + @echo To build the examples, type: + @echo " make examples" + @echo + @echo "To build the CORBA example (requires Java2):" + @echo " make corba" + @echo ------------------------------------------------------------ + @echo -.PHONY: install-perl5 +dep depend: + +# This rule builds the javadoc documentation +doc: + export CLASSPATH=.;\ + $(JAVADOC) -public \ + org.postgresql \ + org.postgresql.fastpath \ + org.postgresql.largeobject + +# These classes form the driver. These, and only these are placed into +# the jar file. +OBJ_COMMON= $(PGBASE)/Connection.class \ + $(PGBASE)/Driver.class \ + $(PGBASE)/Field.class \ + $(PGBASE)/PG_Stream.class \ + $(PGBASE)/ResultSet.class \ + $(PGBASE)/errors.properties \ + $(PGBASE)/errors_fr.properties \ + $(PGBASE)/fastpath/Fastpath.class \ + $(PGBASE)/fastpath/FastpathArg.class \ + $(PGBASE)/geometric/PGbox.class \ + $(PGBASE)/geometric/PGcircle.class \ + $(PGBASE)/geometric/PGline.class \ + $(PGBASE)/geometric/PGlseg.class \ + $(PGBASE)/geometric/PGpath.class \ + $(PGBASE)/geometric/PGpoint.class \ + $(PGBASE)/geometric/PGpolygon.class \ + $(PGBASE)/largeobject/LargeObject.class \ + $(PGBASE)/largeobject/LargeObjectManager.class \ + $(PGBASE)/util/PGmoney.class \ + $(PGBASE)/util/PGobject.class \ + $(PGBASE)/util/PGtokenizer.class \ + $(PGBASE)/util/PSQLException.class \ + $(PGBASE)/util/Serialize.class \ + $(PGBASE)/util/UnixCrypt.class + +# These files are unique to the JDBC 1 (JDK 1.1) driver +OBJ_JDBC1= $(PGBASE)/jdbc1/CallableStatement.class \ + $(PGBASE)/jdbc1/Connection.class \ + $(PGBASE)/jdbc1/DatabaseMetaData.class \ + $(PGBASE)/jdbc1/PreparedStatement.class \ + $(PGBASE)/jdbc1/ResultSet.class \ + $(PGBASE)/jdbc1/ResultSetMetaData.class \ + $(PGBASE)/jdbc1/Statement.class + +# These files are unique to the JDBC 2 (JDK 2 nee 1.2) driver +OBJ_JDBC2= $(PGBASE)/jdbc2/ResultSet.class \ + $(PGBASE)/jdbc2/PreparedStatement.class \ + $(PGBASE)/jdbc2/CallableStatement.class \ + $(PGBASE)/jdbc2/Connection.class \ + $(PGBASE)/jdbc2/DatabaseMetaData.class \ + $(PGBASE)/jdbc2/ResultSetMetaData.class \ + $(PGBASE)/jdbc2/Statement.class \ + $(PGBASE)/largeobject/PGblob.class + +# This rule builds the JDBC1 compliant driver +jdbc1: + (echo "package org.postgresql;" ;\ + echo "public class DriverClass {" ;\ + echo "public static String connectClass=\"org.postgresql.jdbc1.Connection\";" ;\ + echo "}" \ + ) >$(PGBASE)/DriverClass.java + @$(MAKE) jdbc1real + +jdbc1real: $(PGBASE)/DriverClass.class \ + $(OBJ_COMMON) $(OBJ_JDBC1) postgresql.jar msg + +# This rule builds the JDBC2 compliant driver +jdbc2: + (echo "package org.postgresql;" ;\ + echo "public class DriverClass {" ;\ + echo "public static String connectClass=\"org.postgresql.jdbc2.Connection\";" ;\ + echo "}" \ + ) >$(PGBASE)/DriverClass.java + @$(MAKE) jdbc2real + +jdbc2real: $(PGBASE)/DriverClass.class \ + $(OBJ_COMMON) $(OBJ_JDBC2) postgresql.jar msg + +# If you have problems with this rule, replace the $( ) with ` ` as some +# shells (mainly sh under Solaris) doesn't recognise $( ) +# +# Note: This works by storing all compiled classes under the $(PGBASE) +# directory. We use this later for compiling the dual-mode driver. +# +postgresql.jar: $(OBJ) $(OBJ_COMMON) + $(JAR) -c0f $@ `$(FIND) $(PGBASE) -name "*.class" -print` \ + $(wildcard $(PGBASE)/*.properties) + +# This rule removes any temporary and compiled files from the source tree. +clean: + $(FIND) . -name "*~" -exec $(RM) {} \; + $(FIND) . -name "*.class" -exec $(RM) {} \; + $(FIND) . -name "*.html" -exec $(RM) {} \; + -$(RM) -rf stock example/corba/stock.built + -$(RM) postgresql.jar + -$(RM) -rf Package-postgresql *output + +####################################################################### +# This helps make workout what classes are from what source files +# +# Java is unlike C in that one source file can generate several +# _Different_ file names +# +$(PGBASE)/Connection.class: $(PGBASE)/Connection.java +$(PGBASE)/DatabaseMetaData.class: $(PGBASE)/DatabaseMetaData.java +$(PGBASE)/Driver.class: $(PGBASE)/Driver.java +$(PGBASE)/Field.class: $(PGBASE)/Field.java +$(PGBASE)/PG_Stream.class: $(PGBASE)/PG_Stream.java +$(PGBASE)/PreparedStatement.class: $(PGBASE)/PreparedStatement.java +$(PGBASE)/ResultSet.class: $(PGBASE)/ResultSet.java +$(PGBASE)/ResultSetMetaData.class: $(PGBASE)/ResultSetMetaData.java +$(PGBASE)/Statement.class: $(PGBASE)/Statement.java +$(PGBASE)/fastpath/Fastpath.class: $(PGBASE)/fastpath/Fastpath.java +$(PGBASE)/fastpath/FastpathArg.class: $(PGBASE)/fastpath/FastpathArg.java +$(PGBASE)/geometric/PGbox.class: $(PGBASE)/geometric/PGbox.java +$(PGBASE)/geometric/PGcircle.class: $(PGBASE)/geometric/PGcircle.java +$(PGBASE)/geometric/PGlseg.class: $(PGBASE)/geometric/PGlseg.java +$(PGBASE)/geometric/PGpath.class: $(PGBASE)/geometric/PGpath.java +$(PGBASE)/geometric/PGpoint.class: $(PGBASE)/geometric/PGpoint.java +$(PGBASE)/geometric/PGpolygon.class: $(PGBASE)/geometric/PGpolygon.java +$(PGBASE)/largeobject/LargeObject.class: $(PGBASE)/largeobject/LargeObject.java +$(PGBASE)/largeobject/LargeObjectManager.class: $(PGBASE)/largeobject/LargeObjectManager.java +$(PGBASE)/util/PGmoney.class: $(PGBASE)/util/PGmoney.java +$(PGBASE)/util/PGobject.class: $(PGBASE)/util/PGobject.java +$(PGBASE)/util/PGtokenizer.class: $(PGBASE)/util/PGtokenizer.java +$(PGBASE)/util/Serialize.class: $(PGBASE)/util/Serialize.java +$(PGBASE)/util/UnixCrypt.class: $(PGBASE)/util/UnixCrypt.java + +####################################################################### +# These classes are in the example directory, and form the examples +EX= example/basic.class \ + example/blobtest.class \ + example/datestyle.class \ + example/psql.class \ + example/ImageViewer.class \ + example/metadata.class \ + example/threadsafe.class +# example/Objects.class + +# This rule builds the examples +examples: postgresql.jar $(EX) + @echo ------------------------------------------------------------ + @echo The examples have been built. + @echo + @echo For instructions on how to use them, simply run them. For example: + @echo + @echo " java example.blobtest" + @echo + @echo This would display instructions on how to run the example. + @echo ------------------------------------------------------------ + @echo Available examples: + @echo + @echo " example.basic Basic JDBC useage" + @echo " example.blobtest Binary Large Object tests" + @echo " example.datestyle Shows how datestyles are handled" + @echo " example.ImageViewer Example application storing images" + @echo " example.psql Simple java implementation of psql" + @echo " example.Objects Demonstrates Object Serialisation" + @echo " " + @echo These are not really examples, but tests various parts of the driver + @echo " example.metadata Tests various metadata methods" + @echo " example.threadsafe Tests the driver's thread safety" + @echo ------------------------------------------------------------ + @echo + +example/basic.class: example/basic.java +example/blobtest.class: example/blobtest.java +example/datestyle.class: example/datestyle.java +example/psql.class: example/psql.java +example/ImageViewer.class: example/ImageViewer.java +example/threadsafe.class: example/threadsafe.java +example/metadata.class: example/metadata.java + +####################################################################### +# +# CORBA This extensive example shows how to integrate PostgreSQL +# JDBC & CORBA. + +CORBASRC = $(wildcard example/corba/*.java) +CORBAOBJ = $(subst .java,.class,$(CORBASRC)) + +corba: jdbc2 example/corba/stock.built $(CORBAOBJ) + @echo ------------------------------------------------------- + @echo The corba example has been built. Before running, you + @echo will need to read the example/corba/readme file on how + @echo to run the example. + @echo + +# +# This compiles our idl file and the stubs +# +# Note: The idl file is in example/corba, but it builds a directory under +# the current one. For safety, we delete that directory before running +# idltojava +# +example/corba/stock.built: example/corba/stock.idl + -rm -rf stock + $(IDL2JAVA) $< + $(JAVAC) stock/*.java + $(TOUCH) $@ + +# tip: we cant use $(wildcard stock/*.java) in the above rule as a race +# condition occurs, where javac is passed no arguments +#######################################################################