diff options
Diffstat (limited to 'GNUmakefile')
-rw-r--r-- | GNUmakefile | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/GNUmakefile b/GNUmakefile index 3bf3623d..1beebb4c 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -11,6 +11,7 @@ # deb: Make a .deb file in the current dir. # # check-tree: Conduct tests on Netpbm files in the source dir. +# with "target=pamtotga" tests only pamtotga. # check-package: Conduct tests on packaged Netpbm files. # check-install: Conduct tests on installed Netpbm files. # check: Default check. Synonym for check-package. @@ -101,18 +102,27 @@ all: nonmerge .PHONY: nonmerge nonmerge: $(PRODUCT_SUBDIRS:%=%/all) -# Parallel make (make --jobs) is not smart enough to coordinate builds -# between submakes, so a naive parallel make would cause certain -# targets to get built multiple times simultaneously. That is usually -# unacceptable. So we introduce extra dependencies here just to make -# sure such targets are already up to date before the submake starts, -# for the benefit of parallel make. Note that we ensure that parallel -# make works for 'make all' in the top directory, but it may still fail -# for the aforementioned reason for other invocations. +# Completely parallel make (make --jobs) does not work because there are +# multiple targets somewhere in the Netpbm build that depend upon pm_config.h +# and similar targets, and the threads building those multiple targets might +# simultaneously find that pm_config.h needs to be built and proceed to build +# it. After one thread has built pm_config.h, it will proceed to use +# pm_config.h, but the other thread is still building pm_config.h, which is +# not valid while it is in the middle of being built. +# +# But many submakes don't have any such shared dependencies, so build their +# targets in parallel just fine. So we declare this make file ineligible for +# parallel make and have special dependencies to get pm_config.h and like +# targets built before any submakes begin. The submakes will thus never find +# that pm_config.h needs to be built, so we leave them eligible for parallel +# make. + +.NOTPARALLEL: $(SUBDIRS:%=%/all) lib/util/all: pm_config.h inttypes_netpbm.h version.h $(PROG_SUBDIRS:%=%/all): lib/all $(SUPPORT_SUBDIRS:%=%/all) lib/all: lib/util/all +netpbm: lib/all .PHONY: lib/util/all lib/util/all: @@ -139,7 +149,7 @@ $(TYPEGEN) $(ENDIANGEN): $(BUILDDIR)/buildtools $(MAKE) -C $(dir $@) -f $(SRCDIR)/buildtools/Makefile \ SRCDIR=$(SRCDIR) BUILDDIR=$(BUILDDIR) $(notdir $@) -inttypes_netpbm.h: $(TYPEGEN) +$(BUILDDIR)/inttypes_netpbm.h: $(TYPEGEN) $(TYPEGEN) >$@ @@ -155,7 +165,7 @@ $(TESTRANDOM): $(BUILDDIR)/test # that or to override the results, because it doesn't work if he's # cross compiling. -pm_config.h: \ +$(BUILDDIR)/pm_config.h: \ $(SRCDIR)/pm_config.in.h config.mk inttypes_netpbm.h \ $(ENDIANGEN) # Note that this rule depends on the effect of the .DELETE_ON_ERROR @@ -197,7 +207,7 @@ endif MAJOR := $(NETPBM_MAJOR_RELEASE) MINOR := $(NETPBM_MINOR_RELEASE) POINT := $(NETPBM_POINT_RELEASE) -version.h: $(SRCDIR)/version.mk +$(BUILDDIR)/version.h: $(SRCDIR)/version.mk @rm -f $@ @echo "/* Generated by make file rule */" >>$@ @echo "#define NETPBM_VERSION" \ @@ -373,18 +383,6 @@ netpbm:%:%.o $(OBJECT_DEP) $(NETPBMLIB) $(URTLIBDEP) $(LIBOPT) netpbm.o: mergetrylist -install.merge: local.install.merge -.PHONY: local.install.merge -local.install.merge: - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm pnmnoraw - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm gemtopbm - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm pnminterp - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm pgmoil - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm ppmtojpeg - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm bmptoppm - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm pgmnorm - cd $(PKGDIR)/bin; $(SYMLINKEXE) netpbm pnmfile - ifneq ($(NETPBMLIBTYPE),unixstatic) install.lib: lib/install.lib else @@ -519,9 +517,9 @@ check-tree : PALMMAPDIR ?= $(SRCDIR)/converter/other/pnmtopalm # Create RESULTDIR. -# If it already exists, rename and covert to an archive directory. +# If it already exists, rename and convert to an archive directory. # Use numbered backup. -# TODO: Renaming fails with old versions of mv which do not support -T. +# Note: Renaming fails with old versions of mv which do not have -T. resultdir-backup: FORCE if [ -d $(RESULTDIR) ]; \ |