[postgis-devel] Autoprobing java source files
strk at refractions.net
strk at refractions.net
Tue Apr 26 02:03:08 PDT 2005
On Tue, Apr 26, 2005 at 08:34:12AM +0200, Markus Schaber wrote:
> Hello,
>
> Here's the next roundtrip for autoprobing of source files:
>
> I now have a Makefile-Sources.conf that is included by the Makefile, and
> intended to be checked into CVS. There's a make sourceconfig target that
> auto-regenerates this file.
>
> Drawback: If this file does not exist at all, Make aborts on inclusion
> failure, so one needs to touch it. But as this file is intended to be
> checked into CVS, people who randomly delete config files must go
> through that hassle.
>
> I'm still unshure whether this is the correct way to go. As currently
> all Windows postgis developers seem need either cygwin or mingW, they
> should have find installed, and so having the find included in the
> Makefile should work fine for them.
>
> On the other hand, typical Windows Java developers do not have make & co
> installed, so it does not help them to avoid the dependence on find.
If having make means having 'find' there's no real point in using
the Makefile-Sources, except the fact that manual edit of Makefile-Sources
would give you more control if you plan to keep extra-package java
files in the source tree w/out a clean rule for 'find' to find.
As for the failing include, what I use usually is a Makefile which
contains a rule to create Makefile-Sources, where Makefile-Sources
is a dependency of all the rules requiring it. Of course the "real"
stuff is in another Makefile, which is invoked by rule, which I usually
call Makefile-real. See how Makefile.config is "required" by rules
in Makefile in top postgis dir.
Hope that helps.
--strk;
>
> Markus
> # PostGIS Makefile
>
> # (C) 2004 Paul Ramsey, pramsey at refractions.net
> # (C) 2005 Markus Schaber, markus.schaber at logix-tt.com
> # (C) 2005 Sandro Santilli, strk at refractions.net
> # (C) 2005 Alex Bodnaru, alexbodn at 012.net.il
>
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 2 of the License, or
> # (at your option) any later version.
>
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> # GNU General Public License for more details.
>
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
>
> # Following are some variable definitions that may have to be changed
> # according to your build environment. This can be done either by editing
> # this Makefile, or setting them via shell environment prior to calling make.
>
> ### Config variable section starts ###
>
> # Configure the helper executables used during build.
>
> JAVAC?=javac -target 1.2 -source 1.2
> JAVA?=java
> JAR?=jar
> MKDIR?=mkdir -p
> DELETE?=rm -rvf
> CP?=cp
>
> # If you happen to be stuck with ancient jar implementations that do not
> # know about -u, but happen to have one that does not complain about
> # duplicate directorys (e. G. debian woody fastjar), set the DEBUGJAR
> # variable to postgis_debug.fastjar and JAR (above) to fastjar.
> DEBUGJAR?=postgis_debug.jar
>
> # Find our postgresql build directory - needed for "make installdirs" and
> # "make install" that are used by the debian packaging process. As everything
> # else works without Makefile.global, we don't abort on inclusion failure
> # and use late checking iside those rules instead.
> ifeq (${PGSQL_SRC},)
> PGSQL_SRC=../../..
> endif
>
> top_builddir:=$(PGSQL_SRC)
> top_makefile:=$(PGSQL_SRC)/src/Makefile.global
> -include $(top_makefile)
>
> # Make sure our classpath includes your postgresql.jar. This is somehow
> # difficult because some JREs (e. G. those on debian woody or sablevm) seem
> # to forget their own system classes (aka bootclasspath) as soon as _any_
> # classpath is set, either via environment or via command line. They do not
> # implement the concept of distinct classpath and bootclasspath settings,
> # as most current java implementations do. This makes it necessary to either
> # explicitly include the system classes in the set classpath, or use
> # non-standard options line --addclasspath to add both the postgresql.jar
> # and our own classes. We also cannot set an unset CLASSPATH variable here
> # for this reason. Current (Jan 2005) implementations from SUN, IBM,
> # Blackdown, gij and kaffe are known to work fine.
>
> # If you set POSTGIS_BUILD_CLASSPATH via Environment (even to an empty string), we
> # simply use it and do not try to guess anything. If POSTGIS_CLASSPATH is
> # not set, we use the contents of CLASSPATH. If CLASSPATH is empty or not
> # set, we try to guess a default location that works on most unixoid systems.
>
> ifeq (${CLASSPATH},)
> POSTGIS_BUILD_CLASSPATH?=/usr/share/java/postgresql.jar
> else
> POSTGIS_BUILD_CLASSPATH?=${CLASSPATH}
> endif
>
> # Set those to --addclasspath for sablevm, to avoid overriding the
> # BOOTCLASSPATH, the first one is for the compiler, the second one for JRE.
> COMP_ADDCP?=-classpath
> EXEC_ADDCP?=-classpath
>
> # Class path entry separator, this is : on Linux/Unix and ; on Windows
> CPSEP?=:
>
> # This are used for the online regression tests, override via environment
> # as applicable. The jtest needs table creation privilege in current_schema(),
> # the others only call self contained SELECTs that do not access any tables.
> PGHOST?=localhost
> PGPORT?=5432
> PGDATABASE?=jdbc_test
> PGUSER?=psql
> PGPASS?=guess
> PGURL?=//$(PGHOST):$(PGPORT)/$(PGDATABASE)
>
> # Where to put the output from regression tests. If you want to have it on
> # stdout, set TESTOUT to the empty string. Be careful - this will be deleted
> # by "make clean".
> TESTOUTPUT?=test.log
>
> ### Config variable section ends ###
>
> # build internal constants follow:
> SRCDIR=src
> EXAMPLES=examples
> BUILD=bin
> RUNCP=$(POSTGIS_BUILD_CLASSPATH)$(CPSEP)./postgis.jar
> BUILDCP=$(STUBBUILD)$(CPSEP)$(POSTGIS_BUILD_CLASSPATH)$(CPSEP)$(SRCDIR)
>
> # Get the list of all source files
> SRCCONF=Makefile-Sources.conf
>
> include $(SRCCONF)
>
> # The pgjdbc 7.2/7.4/8.0 compatibility stub stuff
> STUBDIR=stubs
> STUBBUILD=stubbin/
>
> # What to put into the JAR files:
> JARCONTENTS=-C $(BUILD) org \
> -C $(BUILD) examples \
> -C $(SRCDIR) org/postgresql/driverconfig.properties \
> -C . README COPYING_LGPL \
> -C .. COPYING
>
> DEBUGJARCONTENTS=-C $(SRCDIR) org \
> -C $(SRCDIR) examples
>
> # include version numbers from central repository
> include ../Version.config
> VERSION=$(JDBC_MAJOR_VERSION)_$(JDBC_MINOR_VERSION)_$(JDBC_MICRO_VERSION)
> VERSIONPATH=$(BUILD)/org/postgis
> VERSIONTARGET=$(VERSIONPATH)/version.properties
>
> # Output redirect for tests
> TESTRD= >>$(TESTOUTPUT)
>
> # Preliminary jts support - not stable yet!
> JTSDIR=jtssrc
> JTSBUILD=jtsbin/
>
> JTSPATH=$(JTSBUILD)$(CPSEP)$(BUILD)$(CPSEP)$(RUNCP)
>
> # Now the makefile targets that do the work:
>
> all: jar \
> offlinetests
>
> jar: compile postgis.jar $(DEBUGJAR)
> $(CP) postgis.jar postgis_$(VERSION).jar
> $(CP) postgis_debug.jar postgis_debug_$(VERSION).jar
>
> postgis.jar: compile $(SRCDIR)/org/postgresql/driverconfig.properties
> $(JAR) -cf postgis.jar $(JARCONTENTS)
>
> postgis_debug.jar: postgis.jar $(SRC)
> $(CP) postgis.jar postgis_debug.jar
> $(JAR) -uf postgis_debug.jar $(DEBUGJARCONTENTS)
>
> # woody seems to have only broken jar implementations
> postgis_debug.fastjar: compile $(SRC) $(SRCDIR)/org/postgresql/driverconfig.properties
> $(JAR) -cf postgis_debug.jar $(JARCONTENTS) $(DEBUGJARCONTENTS)
>
> $(BUILD):
> $(MKDIR) $(BUILD)
>
> $(STUBBUILD):
> $(MKDIR) $(STUBBUILD)
>
> $(VERSIONPATH): $(BUILD)
> $(MKDIR) $(VERSIONPATH)
>
> versionstamp: $(SRC) ../Version.config $(VERSIONPATH)
> echo >>$(VERSIONTARGET) JDBC_MAJOR_VERSION=$(JDBC_MAJOR_VERSION)
> echo >>$(VERSIONTARGET) JDBC_MINOR_VERSION=$(JDBC_MINOR_VERSION)
> echo >>$(VERSIONTARGET) JDBC_MICRO_VERSION=$(JDBC_MICRO_VERSION)
> touch versionstamp
>
> stubcompile: $(STUBBUILD) $(SRCCONF) $(STUBSRC)
> $(JAVAC) -d $(STUBBUILD) $(STUBSRC)
> touch stubcompile
>
> compile: stubcompile $(BUILD) $(SRCCONF) $(SRC) versionstamp
> $(JAVAC) $(COMP_ADDCP) "$(BUILDCP)" -d $(BUILD) $(SRC)
> touch compile
>
> test: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/Test $(TESTRD)
>
> jtest: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestServer $(TESTRD) \
> jdbc:postgresql:$(PGURL) $(PGUSER) $(PGPASS)
>
> ptestoffline: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestParser $(TESTRD) offline
>
> ptest: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestParser $(TESTRD) \
> "jdbc:postgresql_postGIS:$(PGURL);jdbc:postgresql_autogis:$(PGURL)" \
> $(PGUSER) $(PGPASS)
>
> boxtestoffline: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestBoxes $(TESTRD) offline
>
> boxtest: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestBoxes $(TESTRD) \
> jdbc:postgresql_postGIS:$(PGURL) $(PGUSER) $(PGPASS)
>
> autoregistertest: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/TestAutoregister $(TESTRD) \
> jdbc:postgresql:$(PGURL) $(PGUSER) $(PGPASS)
>
> # Print all available versions
> versions: postgis.jar
> $(JAVA) $(EXEC_ADDCP) "$(RUNCP)" $(EXAMPLES)/VersionPrinter jdbc:postgresql://$(PGHOST):$(PGPORT)/$(PGDATABASE) $(PGUSER) $(PGPASS)
>
> offlinetests: boxtestoffline ptestoffline test
>
> onlinetests: boxtest ptest jtest autoregistertest
>
> # boxtest and ptest include boxtestoffline and ptestoffline, so we only need
> # to run test in addition to the onlinetests
> alltests: onlinetests test
>
> clean:
> $(DELETE) $(BUILD) bin stubbin postgis.jar postgis_debug.jar \
> compile stubcompile jtscompile $(JTSBUILD) postgis_jts.jar \
> versionstamp \
> $(TESTOUTPUT) \
> postgis_$(VERSION).jar \
> postgis_debug_$(VERSION).jar \
> postgis_jts_$(VERSION).jar
>
> .PHONY: sourceconfig
> sourceconfig:
> @echo >$(SRCCONF) '# source files to be compiled '
> @echo >>$(SRCCONF) '# For PostGIS jdbc $(VERSION)'
> @echo >>$(SRCCONF) '# Generated by $Id$ '
> @echo >>$(SRCCONF) '# File ID: $$I'd$$ #weird quoting to mask Id keyword tag from CVS
> @echo >>$(SRCCONF) SRC = $(shell find $(SRCDIR)/ -name '*.java')
> @echo >>$(SRCCONF) STUBSRC= $(shell find $(STUBDIR)/ -name '*.java')
> @echo >>$(SRCCONF) JTSSRC = $(shell find $(JTSDIR)/ -name '*.java')
> @echo $(SRCCONF) updated.
>
>
> # Install - this needs the successfull inclusion of PostgreSQL top
> # level Makefile (which is mandatory for the C part of PostGIS as well).
> install: jar installdirs
> @echo Testing for successful inclusion of $(top_makefile)
> test $(top_makefile)
> $(INSTALL_DATA) postgis.jar $(DESTDIR)
> $(INSTALL_DATA) postgis_debug.jar $(DESTDIR)
>
> installdirs:
> @echo Testing for successful inclusion of $(top_makefile)
> test $(top_makefile)
> $(mkinstalldirs) $(DESTDIR)
>
> # Preliminary JTS support
>
> postgis_jts: postgis_jts.jar jtstestoffline
> @echo "Warning! This is beta code. Use at your own risk."
>
> $(JTSBUILD):
> $(MKDIR) $(JTSBUILD)
>
>
> jtscompile: compile stubcompile $(JTSBUILD) $(SRCCONF) $(JTSSRC)
> $(JAVAC) $(COMP_ADDCP) "$(BUILD)$(CPSEP)$(BUILDCP)" -d $(JTSBUILD) $(JTSSRC)
> touch jtscompile
>
> jtstestoffline: jtscompile
> $(JAVA) $(EXEC_ADDCP) "$(JTSPATH)" $(EXAMPLES)/JtsTestParser offline
>
> jtstest: jtscompile
> $(JAVA) $(EXEC_ADDCP) "$(JTSPATH)" $(EXAMPLES)/JtsTestParser $(TESTRD) \
> jdbc:postgres_jts:$(PGURL) $(PGUSER) $(PGPASS)
>
> postgis_jts.jar: postgis.jar jtscompile $(SRCDIR)/org/postgresql/driverconfig.properties
> $(CP) postgis.jar postgis_jts.jar
> $(JAR) -uf postgis_jts.jar -C $(JTSBUILD) .
> $(CP) postgis_jts.jar postgis_jts_$(VERSION).jar
>
>
>
>
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
More information about the postgis-devel
mailing list