Re: plpython thinks it's hooked into "make distprep", but not so much

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: plpython thinks it's hooked into "make distprep", but not so much
Дата
Msg-id 19034.1309639672@sss.pgh.pa.us
обсуждение исходный текст
Ответ на plpython thinks it's hooked into "make distprep", but not so much  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I wrote:
> I noticed while wrapping 9.1beta2 that plpython tries to build a file
> spiexceptions.h to be included in the tarballs, but no such file is
> actually appearing therein.  The reason is that src/pl/Makefile doesn't
> recurse into the plpython subdirectory unless with_python is set.
> Which it isn't, because the tarball build script doesn't configure
> --with-python (or with any other options for that matter).  If it did,
> it would fail, since there's no python installation on
> developer.postgresql.org.

> I left this go for the moment, since the only implication is that you
> have to have perl available to build plpython from the tarball.  But we
> oughta fix it before final.  Any opinions on what's the least ugly way
> to get control to recurse to src/pl/plpython for "make distprep"
> regardless of with_python?

> (More generally, I would like to see cleanup targets such as make
> distclean and make maintainer-clean recurse to all subdirectories
> regardless of configure options, but that might be too much to ask for
> right now.)

Attached is a proposed patch to fix this.  I found that the general
case was not too hard to solve, so this patch causes the make system
to recurse everywhere for distprep, clean, distclean, maintainer-clean
cases.  Anybody have a cleaner way to do it, or want to bikeshed on
the macro names?

            regards, tom lane

diff --git a/contrib/Makefile b/contrib/Makefile
index 6967767..0c238aa 100644
*** a/contrib/Makefile
--- b/contrib/Makefile
*************** SUBDIRS = \
*** 52,69 ****
--- 52,77 ----

  ifeq ($(with_openssl),yes)
  SUBDIRS += sslinfo
+ else
+ ALWAYS_SUBDIRS += sslinfo
  endif

  ifeq ($(with_ossp_uuid),yes)
  SUBDIRS += uuid-ossp
+ else
+ ALWAYS_SUBDIRS += uuid-ossp
  endif

  ifeq ($(with_libxml),yes)
  SUBDIRS += xml2
+ else
+ ALWAYS_SUBDIRS += xml2
  endif

  ifeq ($(with_selinux),yes)
  SUBDIRS += sepgsql
+ else
+ ALWAYS_SUBDIRS += sepgsql
  endif

  # Missing:
*************** endif
*** 71,73 ****
--- 79,82 ----


  $(recurse)
+ $(recurse_always)
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index ba08223..3bf658d 100644
*** a/src/Makefile.global.in
--- b/src/Makefile.global.in
***************
*** 19,24 ****
--- 19,26 ----
  # Meta configuration

  standard_targets = all install installdirs uninstall distprep clean distclean maintainer-clean coverage check
installcheckmaintainer-check 
+ # these targets should recurse even into subdirectories not being built:
+ standard_always_targets = distprep clean distclean maintainer-clean

  .PHONY: $(standard_targets) install-strip html man installcheck-parallel

*************** endef
*** 603,608 ****
--- 605,620 ----
  # $3: target to run in subdir (defaults to current element of $1)
  recurse = $(foreach target,$(if $1,$1,$(standard_targets)),$(foreach subdir,$(if $2,$2,$(SUBDIRS)),$(eval $(call
_create_recursive_target,$(target),$(subdir),$(if$3,$3,$(target)))))) 

+ # If a makefile's list of SUBDIRS varies depending on configuration, then
+ # any subdirectories excluded from SUBDIRS should instead be added to
+ # ALWAYS_SUBDIRS, and then it must call recurse_always as well as recurse.
+ # This ensures that distprep, distclean, etc will apply to all subdirectories.
+ # In the normal case all arguments will be defaulted.
+ # $1: targets to make recursive (defaults to standard_always_targets)
+ # $2: list of subdirs (defaults to ALWAYS_SUBDIRS variable)
+ # $3: target to run in subdir (defaults to current element of $1)
+ recurse_always = $(foreach target,$(if $1,$1,$(standard_always_targets)),$(foreach subdir,$(if
$2,$2,$(ALWAYS_SUBDIRS)),$(eval$(call _create_recursive_target,$(target),$(subdir),$(if $3,$3,$(target)))))) 
+

  ##########################################################################
  #
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3809412..c333a48 100644
*** a/src/bin/Makefile
--- b/src/bin/Makefile
*************** include $(top_builddir)/src/Makefile.glo
*** 15,22 ****

  SUBDIRS = initdb pg_ctl pg_dump \
      psql scripts pg_config pg_controldata pg_resetxlog pg_basebackup
  ifeq ($(PORTNAME), win32)
! SUBDIRS+=pgevent
  endif

  $(recurse)
--- 15,26 ----

  SUBDIRS = initdb pg_ctl pg_dump \
      psql scripts pg_config pg_controldata pg_resetxlog pg_basebackup
+
  ifeq ($(PORTNAME), win32)
! SUBDIRS += pgevent
! else
! ALWAYS_SUBDIRS += pgevent
  endif

  $(recurse)
+ $(recurse_always)
diff --git a/src/pl/Makefile b/src/pl/Makefile
index ef630fe..c4a0d1c 100644
*** a/src/pl/Makefile
--- b/src/pl/Makefile
*************** SUBDIRS = plpgsql
*** 16,29 ****
--- 16,36 ----

  ifeq ($(with_perl), yes)
  SUBDIRS += plperl
+ else
+ ALWAYS_SUBDIRS += plperl
  endif

  ifeq ($(with_python), yes)
  SUBDIRS += plpython
+ else
+ ALWAYS_SUBDIRS += plpython
  endif

  ifeq ($(with_tcl), yes)
  SUBDIRS += tcl
+ else
+ ALWAYS_SUBDIRS += tcl
  endif

  $(recurse)
+ $(recurse_always)
diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile
index 2c05755..56e06d7 100644
*** a/src/pl/plpython/Makefile
--- b/src/pl/plpython/Makefile
*************** PSQLDIR = $(bindir)
*** 95,110 ****

  include $(top_srcdir)/src/Makefile.shlib

- # Force this dependency to be known even without dependency info built:
- plpython.o: spiexceptions.h
-
- spiexceptions.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-spiexceptions.pl
-     $(PERL) $(srcdir)/generate-spiexceptions.pl $< > $@
-
  all: all-lib

- distprep: spiexceptions.h
-

  install: all install-lib install-data

--- 95,102 ----
*************** installcheck: submake prep3
*** 151,163 ****
      $(pg_regress_installcheck) --inputdir=./python3 --outputdir=./python3 $(REGRESS_OPTS) $(REGRESS)

  clean: clean3
! else
  check: submake
      $(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)

  installcheck: submake
      $(pg_regress_installcheck) $(REGRESS_OPTS) $(REGRESS)
! endif

  .PHONY: submake
  submake:
--- 143,155 ----
      $(pg_regress_installcheck) --inputdir=./python3 --outputdir=./python3 $(REGRESS_OPTS) $(REGRESS)

  clean: clean3
! else # not Python 3
  check: submake
      $(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)

  installcheck: submake
      $(pg_regress_installcheck) $(REGRESS_OPTS) $(REGRESS)
! endif # not Python 3

  .PHONY: submake
  submake:
*************** ifeq ($(PORTNAME), win32)
*** 170,178 ****
      rm -f python${pytverstr}.def
  endif

- maintainer-clean: distclean
-     rm -f spiexceptions.h
-
  else # can't build

  all:
--- 162,167 ----
*************** all:
*** 183,185 ****
--- 172,187 ----
       echo ""

  endif # can't build
+
+ # distprep and maintainer-clean rules should be run even if we can't build.
+
+ # Force this dependency to be known even without dependency info built:
+ plpython.o: spiexceptions.h
+
+ spiexceptions.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-spiexceptions.pl
+     $(PERL) $(srcdir)/generate-spiexceptions.pl $< > $@
+
+ distprep: spiexceptions.h
+
+ maintainer-clean: distclean
+     rm -f spiexceptions.h

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [v9.2] Fix leaky-view problem, part 1
Следующее
От: Peter Eisentraut
Дата:
Сообщение: merge pg_proc and pg_operator?