Обсуждение: Problems with pgxs
I have some problems when adjusting PL/Java to use PGXS in its
makefiles. Aside from the Win32 problem I asked about earlier, I also
have problems using the MODULE_big. When used, it brings in the
Makefile.shlib and attempts to use the target all-lib. That target is
defined as:
all-lib: all-static-lib all-shared-lib
all-static-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h lib$(NAME).a
all-shared-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h $(shlib)
but the $(top_builddir)/src/port directory is non existant in PostgreSQL
installation.
I'm not sure if I use pgxs in a completely wrong way or if pgxs needs
some more work before I can rely on it. Are there any other projects out
there that have their source completely separate from the PostgreSQL
source that uses PGXS succesfully? If so, your input on this subject is
greatly appreciated.
Kind regards,
Thomas Hallgren
Thomas Hallgren <thhal@mailblocks.com> writes:
> [ Makefile.shlib contains ]
> all-lib: all-static-lib all-shared-lib
> all-static-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h lib$(NAME).a
> all-shared-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h $(shlib)
Would someone explain to me what in the world these targets are doing
demanding either of those as prerequisite? They certainly did not have
those prereqs in 7.4. This seems an excessively klugy way of handling
some Windows brokenness or other.
regards, tom lane
Tom Lane wrote: > Thomas Hallgren <thhal@mailblocks.com> writes: > > [ Makefile.shlib contains ] > > > all-lib: all-static-lib all-shared-lib > > > all-static-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h lib$(NAME).a > > > all-shared-lib: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h $(shlib) > > Would someone explain to me what in the world these targets are doing > demanding either of those as prerequisite? They certainly did not have > those prereqs in 7.4. This seems an excessively klugy way of handling > some Windows brokenness or other. $(PTHREAD_H_WIN32) is a dependency of libpq and therefore we had to copy it into Makefile.shlib when we are compiling from that file rather than libpq/Makefile. libpq/Makefile has: all: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h def-files all-lib -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> $(PTHREAD_H_WIN32) is a dependency of libpq and therefore we had to copy
> it into Makefile.shlib when we are compiling from that file rather than
> libpq/Makefile. libpq/Makefile has:
> all: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h def-files all-lib
Say again? Why should libpq's dependencies be propagated to every shlib
in the system? And when is libpq built without using libpq/Makefile?
regards, tom lane
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > $(PTHREAD_H_WIN32) is a dependency of libpq and therefore we had to copy > > it into Makefile.shlib when we are compiling from that file rather than > > libpq/Makefile. libpq/Makefile has: > > > all: $(PTHREAD_H_WIN32) $(top_builddir)/src/port/pg_config_paths.h def-files all-lib > > Say again? Why should libpq's dependencies be propagated to every shlib > in the system? And when is libpq built without using libpq/Makefile? No idea. I just know it fixed the problem. The problem report was that you could not build all-static-lib under MinGW. I confirmed that using my MinGW here and developed the following patch:****************** 245,253 **** all-lib: all-static-lib all-shared-lib!all-static-lib: lib$(NAME).a! all-shared-lib: $(shlib) ifneq ($(PORTNAME), cygwin) ifneq ($(PORTNAME), win32)---245,253 ---- all-lib: all-static-lib all-shared-lib! all-static-lib: $(PTHREAD_H_WIN32) $(top_srcdir)/src/port/pg_config_paths.hlib$(NAME).a! all-shared-lib: $(PTHREAD_H_WIN32) $(top_srcdir)/src/port/pg_config_paths.h$(shlib) ifneq ($(PORTNAME), cygwin) ifneq ($(PORTNAME), win32) The problem was that building libpq.a was not generating the include file dependencies. The cause I think is that we have a separate Win32 build rule for a static lib in Makefile.shlib:# win32 case$(shlib) lib$(NAME).a: $(OBJS)ifndef DLL_DEFFILE $(DLLTOOL)--export-all $(DLLTOOL_DEFFLAGS) --output-def $(NAME).def $(OBJS) $(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname$(shlib) $(DLLWRAP_FLAGS) --def $(NAME).def $(OBJS) $(SHLIB_LINK) $(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS)--def $(NAME).def --output-lib lib$(NAME).aelse $(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname$(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK) $(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS)--def $(DLL_DEFFILE) --output-lib lib$(NAME).aendif and that rule discusses only the OBJ files and doesn't know about the *.h files that are needed. Ideas? -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073