# Copyright (c) 1997-2007 # Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany) # http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de # # 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, or (at your option) any # later version: http://www.gnu.org/licenses/gpl.txt. # # 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. #----------------------------------------------------------------------------- # $Project: polymake $$Id: Makefile 7586 2007-01-23 17:51:31Z gawrilow $ ########################################################### # # Building and installation # .PHONY: all all-java configure clean clean-bin clean-java distclean TAGS RTAGS all-perlx perlx test \ install install-devel install-bin install-shared install-perlx install-doc install-devel-bin install-devel-shared ProjectTop := $(CURDIR) _allow_lacking_BuildDir := y include support/utils.make ifeq ($(wildcard $(BuildDir)/conf.make),) BuildDir := endif Configure := $(if $(Arch), Arch="$(Arch)") TOP=$(CURDIR) MAKE=$(MAKE) $(PERL) support/configure.pl ifndef BuildDir all install% config-% : @$(Configure) -quick @$(MAKE) --no-print-directory $@ configure : @$(Configure) else # BuildDir exists ### load configuration include $(BuildDir)/conf.make PerlxDir := $(BuildDir)/perlx-$(PerlVersion)-$(PerlArch) Apps := $(notdir $(filter-out $(call _get_no_export,apps/*,broken|test), $(wildcard apps/*))) Modules := $(notdir $(filter-out $(call _get_no_export,modules/*,broken|test), $(wildcard modules/*))) DefaultAppName := $(firstword $(filter polytope, $(Apps)) $(Apps)) ifneq ($(Apps),) define _MakeAppBin $(MAKE) -C $(BuildDir)/apps/$(1) AppName=$(1) $(2) endef ifdef JavaBuildDir JavaIgnore := JavaUnconfigured define _MakeAppJava $(if $(wildcard apps/$(1)/java/*.java),$(MAKE) -j1 -C $(JavaBuildDir)/$(PackageBase)/$(1) JavaIgnore="$(JavaIgnore)" $(2),:) endef else _MakeAppJava := endif define _MakeAppsBin $(foreach a,$(Apps),$(call _MakeAppBin,$a,BeFirst=$(filter $a,$(firstword $(Apps))) $(1))) endef Jars := $(wildcard $(foreach a, $(Apps) $(Modules), java_build/$a.jar)) define _MakeAppsJava $(if $(JavaBuildDir), \ $(foreach a,$(Apps),$(call _MakeAppJava,$a,BeFirst=$(filter $a,$(firstword $(Apps))) $(1))), \ $(if $(filter install,$(1)), \ $(if $(Jars), \ $(call _CreateDir,-U $(InstallTop)/jars) \ $(PERL) support/install.pl -m 444 $(Jars) $(InstallTop)/jars))) endef all : $(if $(.svn),perlx,all-perlx) @+$(call _MakeAppsBin,all) @+$(call _MakeAppsJava,all) all-perlx: [ -d $(PerlxDir) ] || $(PERL) $(INSTALL_PL) -d -m 755 $(PerlxDir) cd $(PerlxDir); TOP=$(CURDIR) $(PERL) $(CURDIR)/perl/ext/Makefile.PL @$(MAKE) -C $(PerlxDir) all all-java clean-java install-java: @+$(call _MakeAppsJava,$(patsubst %-java,%,$@)) else # !Apps all: @$(MAKE) -C $(BuildDir)/lib all-lib AppName=lib PTLonly=yes endif ### installation define _InstallSubdir $(PERL) support/install.pl -m $(DirMask) -U $(2) $(1) $(InstallTop)/$(1) endef define _CreateDir $(PERL) support/install.pl -d -m $(DirMask) $(1) endef ifneq ($(Apps),) # scripts in support/ which should not be copied to the final installation location InstHelpers := configure.pl configure_java.pl install_links.pl convert_main_script find-provides define _InstallDirLinks $(PERL) support/install_links.pl -m 111 $(1) $(InstallLinks) $(InstallTop) $(DESTDIR) endef define _InstallLinks $(call _InstallDirLinks, $(InstallArch)/$(1)/bin) $(if $(wildcard $(1)/scripts), $(call _InstallDirLinks, $(InstallTop)/$(1)/scripts)) endef define _InstallShared $(if $(wildcard $(1)/scripts), $(call _InstallSubdir,$(1)/scripts,-P $(PerlExe))) $(foreach d, perllib rules, $(if $(wildcard $(1)/$d), $(call _InstallSubdir,$(1)/$d))) endef install: install-shared install-bin install-doc install-devel: install-devel-shared install-devel-bin install-bin: all install-perlx @+$(call _MakeAppsBin, install) ifdef InstallLinks $(call _CreateDir,$(InstallLinks)) $(call _InstallDirLinks, $(InstallTop)/perl) $(foreach m, $(Modules), $(call _InstallLinks,modules/$m)) $(foreach a, $(Apps), $(call _InstallLinks,apps/$a)) $(PERL) support/convert_main_script $(InstallLinks) \ PerlExe=$(PerlExe) $(if $(PREFIX),PREFIX=$(PREFIX)) \ InstallTop=$(FinalInstallTop) InstallArch=$(FinalInstallArch) $(if $(Arch),Arch="$(Arch)") \ DefaultAppName=$(DefaultAppName) endif install-perlx : all-perlx $(call _CreateDir,$(InstallArch)) ifndef RPM_BUILD_ROOT @$(MAKE) -C $(PerlxDir) pure_install InstallDir=$(FinalInstallArch) endif install-devel-bin: @+$(call _MakeAppsBin, install-lib) @rm -f $(InstallArch)/Makefile @{ sed -e '/Install.*=/ s/^/override /' \ -e '/INSTALL_PL=/ s:=.*:=$$(InstallTop)/support/install.pl:' \ -e '/DESTDIR=/ { s/^/override /; q; }' \ $(BuildDir)/conf.make; \ echo 'override ProjectTop=$$(InstallTop)'; \ echo 'ExtendApp ?= $(DefaultAppName)'; \ echo 'include $$(ProjectTop)/support/build.make'; \ } >$(InstallArch)/Makefile @chmod 444 $(InstallArch)/Makefile install-shared: $(call _CreateDir,$(InstallTop)) [ -z "$(AutoconfFile)" -o ! -f "$(AutoconfFile)" ] || $(PERL) support/install.pl -m 644 $(AutoconfFile) $(InstallTop) $(call _InstallSubdir,perl,-X polymake -X ext) $(foreach m, $(Modules), $(call _InstallShared,modules/$m)) $(foreach a, $(Apps), $(call _InstallShared,apps/$a)) $(if $(.svn),$(PERL) perl/polymake --script none::filter_rules $(InstallTop) $(Apps)) $(call _MakeAppsJava,install) $(call _InstallSubdir,povray) $(call _InstallSubdir,scripts) install-devel-shared: $(call _InstallSubdir,support,$(foreach f,$(InstHelpers),-X $f)) @+$(call _MakeAppsBin, install-include) ifneq ($(wildcard doc),) install-doc : perlx $(MAKE) -C doc install PerlxDir=$(BuildDir)/perlx else install-doc: $(PERL) support/install.pl -m $(DirMask) -U doc_build $(InstallDoc) endif else # !Apps install: install-shared install-bin install-shared: $(call _CreateDir,$(InstallTop)) @$(MAKE) -C $(BuildDir)/lib install-include AppName=lib PTLonly=yes install-bin: $(call _CreateDir,$(InstallArch)) @$(MAKE) -C $(BuildDir)/lib install-lib AppName=lib PTLonly=yes endif ### manual re-configuration configure : @$(Configure) $(BuildDir)/conf.make config-% : @echo $($*) ifdef .svn perlx : all-perlx @$(MAKE) -C $(PerlxDir) pure_install InstallDir=$(BuildDir) ### maintenance tagsFLAGS = -R -e -f $@ --exclude=.svn --exclude='.\#*' --exclude='\#*' --exclude='*~' TAGS: ctags $(tagsFLAGS) --language-force=c++ lib {apps,modules}/*/{src,include} RTAGS: ctags $(tagsFLAGS) --language-force=perl --exclude=testsuite --exclude=ext perl \ {apps,modules}/*/{perllib,rules} scripts apps/*/scripts support/*.pl ctags -e -f $@ --append --language-force=c perl/ext/*.{xs,h} test : all +@$(foreach a, $(Apps), $(if $(wildcard apps/$a/testsuite),$(MAKE) -C apps/$a/testsuite all;)) +@$(foreach m, $(Modules), $(if $(wildcard modules/$m/testsuite),$(MAKE) -C modules/$m/testsuite all;)) include support/export.make endif # .svn endif # BuildDir exists ### cleanup clean-bin: ifdef BuildDir @+$(call _MakeAppsBin, clean) rm -rf $(PerlxDir) $(BuildDir)/perlx/$(PerlVersion)/$(PerlArch) endif clean : clean-bin ifdef JavaBuildDir @+$(call _MakeAppsJava, clean) endif ifneq ($(wildcard doc),) @$(MAKE) -C doc clean PerlxDir=none endif distclean : clean [ ! -d lib/PTL ] || rm -rf build* # Local Variables: # mode: Makefile # End: