diff --git a/src/Makefile b/src/Makefile index acb35bb08..aa62fc473 100755 --- a/src/Makefile +++ b/src/Makefile @@ -1,201 +1,197 @@ # LAMMPS multiple-machine Makefile SHELL = /bin/bash #.IGNORE: # Definitions ROOT = lmp EXE = $(ROOT)_$@ SRC = $(wildcard *.cpp) INC = $(wildcard *.h) OBJ = $(SRC:.cpp=.o) # Package variables PACKAGE = asphere class2 colloid dipole gpu granular \ kspace manybody mc meam molecule opt peri poems reax replica \ shock srd xtc PACKUSER = user-misc user-atc user-awpmd user-cg-cmm \ user-cuda user-eff user-ewaldn user-omp user-reaxc PACKALL = $(PACKAGE) $(PACKUSER) PACKAGEUC = $(shell echo $(PACKAGE) | tr a-z A-Z) PACKUSERUC = $(shell echo $(PACKUSER) | tr a-z A-Z) YESDIR = $(shell echo $(@:yes-%=%) | tr a-z A-Z) NODIR = $(shell echo $(@:no-%=%) | tr a-z A-Z) # List of all targets help: @echo '' @echo 'make clean-all delete all object files' @echo 'make clean-machine delete object files for one machine' @echo 'make tar lmp_src.tar.gz of src dir and packages' @echo 'make makelib update Makefile.lib for library build' @echo 'make makelist update Makefile.list used by old makes' @echo '' @echo 'make package list available packages' @echo 'make package-status status of all packages' @echo 'make yes-package install a single package in src dir' @echo 'make no-package remove a single package from src dir' @echo 'make yes-all install all packages in src dir' @echo 'make no-all remove all packages from src dir' @echo 'make yes-standard install all standard packages' @echo 'make no-standard remove all standard packages' @echo 'make yes-user install all user packages' @echo 'make no-user remove all user packages' @echo '' @echo 'make package-update replace src files with package files' @echo 'make package-overwrite replace package files with src files' @echo 'make package-diff diff src files against package files' @echo '' @echo 'make machine build LAMMPS where machine is one of:' @echo '' @files="`ls MAKE/Makefile.*`"; \ for file in $$files; do head -1 $$file; done @echo '' # Build the code .DEFAULT: @test -f MAKE/Makefile.$@ @if [ ! -d Obj_$@ ]; then mkdir Obj_$@; fi @$(SHELL) Make.sh style @cp -p *.cpp *.h Obj_$@ @cp MAKE/Makefile.$@ Obj_$@/Makefile - @if [ ! -e Makefile.package ]; then make package-regenerate; fi - @if [ ! -e Makefile.package.settings ]; then make package-regenerate; fi + @if [ ! -e Makefile.package ]; \ + then cp Makefile.package.empty Makefile.package; fi + @if [ ! -e Makefile.package.settings ]; \ + then cp Makefile.package.settings.empty Makefile.package.settings; fi @cp Makefile.package Makefile.package.settings Obj_$@ @cd Obj_$@; \ - $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" "EXE = ../$(EXE)" ../$(EXE) + $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" \ + "EXE = ../$(EXE)" ../$(EXE) @if [ -d Obj_$@ ]; then cd Obj_$@; rm -f $(SRC) $(INC) Makefile*; fi # Remove machine-specific object files clean: @echo 'make clean-all delete all object files' @echo 'make clean-machine delete object files for one machine' clean-all: rm -rf Obj_* clean-%: rm -rf Obj_$(@:clean-%=%) # Create a tarball of src dir and packages tar: @cd STUBS; make clean @cd ..; tar cvzf src/$(ROOT)_src.tar.gz \ src/Make* src/Package.sh src/MAKE src/*.cpp src/*.h src/STUBS \ $(patsubst %,src/%,$(PACKAGEUC)) $(patsubst %,src/%,$(PACKUSERUC)) \ --exclude=*/.svn @cd STUBS; make @echo "Created $(ROOT)_src.tar.gz" # Make MPI STUBS lib stubs: @cd STUBS; make clean; make # Update Makefile.lib and Makefile.list makelib: @$(SHELL) Make.sh style @$(SHELL) Make.sh Makefile.lib makelist: @$(SHELL) Make.sh style @$(SHELL) Make.sh Makefile.list # Package management package: @echo 'Standard packages:' $(PACKAGE) @echo '' @echo 'User-contributed packages:' $(PACKUSER) @echo '' @echo 'make package list available packages' @echo 'make package-status status of all packages' @echo 'make yes-package install a single package in src dir' @echo 'make no-package remove a single package from src dir' @echo 'make yes-all install all packages in src dir' @echo 'make no-all remove all packages from src dir' @echo 'make yes-standard install all standard packages' @echo 'make no-standard remove all standard packages' @echo 'make yes-user install all user packages' @echo 'make no-user remove all user packages' @echo '' @echo 'make package-update replace src files with package files' @echo 'make package-overwrite replace package files with src files' @echo 'make package-diff diff src files against package file' yes-all: @for p in $(PACKALL); do $(MAKE) yes-$$p; done no-all: @for p in $(PACKALL); do $(MAKE) no-$$p; done yes-standard: @for p in $(PACKAGE); do $(MAKE) yes-$$p; done no-standard: @for p in $(PACKAGE); do $(MAKE) no-$$p; done yes-user: @for p in $(PACKUSER); do $(MAKE) yes-$$p; done no-user: @for p in $(PACKUSER); do $(MAKE) no-$$p; done yes-%: @if [ ! -e $(YESDIR) ]; then \ echo "Package $(@:yes-%=%) does not exist"; \ else \ echo "Installing package $(@:yes-%=%)"; \ cd $(YESDIR); $(SHELL) Install.sh 1; cd ..; $(SHELL) Depend.sh 1; \ fi; no-%: @if [ ! -e $(NODIR) ]; then \ echo "Package $(@:no-%=%) does not exist"; \ else \ echo "Uninstalling package $(@:no-%=%)"; \ cd $(NODIR); $(SHELL) Install.sh 0; cd ..; $(SHELL) Depend.sh 0; \ fi; # status = list src files that differ from package files # update = replace src files with newer package files # overwrite = overwrite package files with newer src files -# regenerate = regenerate Makefile.package from Makefile.package.empty # diff = show differences between src and package files package-status: @for p in $(PACKAGEUC); do $(SHELL) Package.sh $$p status; done @echo '' @for p in $(PACKUSERUC); do $(SHELL) Package.sh $$p status; done package-update: @for p in $(PACKAGEUC); do $(SHELL) Package.sh $$p update; done @echo '' @for p in $(PACKUSERUC); do $(SHELL) Package.sh $$p update; done package-overwrite: @for p in $(PACKAGEUC); do $(SHELL) Package.sh $$p overwrite; done @echo '' @for p in $(PACKUSERUC); do $(SHELL) Package.sh $$p overwrite; done -package-regenerate: - @cp Makefile.package.empty Makefile.package - @cp Makefile.package.settings.empty Makefile.package.settings - @for p in $(PACKAGEUC); do $(SHELL) Package.sh $$p regenerate; done - @for p in $(PACKUSERUC); do $(SHELL) Package.sh $$p regenerate; done - package-diff: @for p in $(PACKAGEUC); do $(SHELL) Package.sh $$p diff; done @echo '' @for p in $(PACKUSERUC); do $(SHELL) Package.sh $$p diff; done diff --git a/src/Package.sh b/src/Package.sh index fb3694bb4..78b7b7a10 100644 --- a/src/Package.sh +++ b/src/Package.sh @@ -1,114 +1,105 @@ # Package.sh = package management, called from Makefile -# Syntax: sh Package.sh DIR status/update/overwrite/regenerate/diff +# Syntax: sh Package.sh DIR status/update/overwrite/diff # style used to translate dir name to package name style=`echo $1 | sed 'y/-ABCDEFGHIJKLMNOPQRSTUVWXYZ/_abcdefghijklmnopqrstuvwxyz/'` # package is already installed if any package *.cpp or *.h file is in src # else not installed cd $1 installed=0 for file in *.cpp *.h; do if (test -e ../$file) then installed=1 fi done # status # if installed: # issue warning if any package file is not in src or is different if (test $2 = "status") then if (test $installed = 1) then echo "Installed YES: package $1" for file in *.cpp *.h; do if (test ! -e ../$file) then echo " src/$file does not exist" elif (test "`diff --brief $file ../$file`" != "") then echo " src/$file and $1/$file are different" fi done else echo "Installed NO: package $1" fi # update # if installed: # cp package file to src if doesn't exist or is different elif (test $2 = "update") then echo "Updating src files from $1 package files" if (test $installed = 1) then if (test ! -e Package.sh) then for file in *.cpp *.h; do if (test ! -e ../$file) then echo " creating src/$file" cp $file .. elif (test "`diff --brief $file ../$file`" != "") then echo " updating src/$file" cp $file .. fi done else /bin/sh Package.sh fi else echo " $1 package is not installed, no action" fi # overwrite # if installed: # if package file not in src, issue warning # if src file different than package file, overwrite package file elif (test $2 = "overwrite") then echo "Overwriting $1 package files with src files" if (test $installed = 1) then for file in *.cpp *.h; do if (test ! -e ../$file) then echo " src/$file does not exist" elif (test "`diff --brief $file ../$file`" != "") then echo " overwriting $1/$file" cp ../$file . fi done else echo " $1 package is not installed, no action" fi -# regenenate Makefile.package from Makefile.package.empty -# if installed: -# re-install so Install.sh will edit Makefile.package - -elif (test $2 = "regenerate") then - if (test $installed = 1) then - /bin/sh Install.sh 1 - fi - # diff # if installed: # show any differences between src files and package files elif (test $2 = "diff") then if (test $installed = 1) then echo "Installed YES: package $1" for file in *.cpp *.h; do if (test ! -e ../$file) then echo "************************************************************************" echo " src/$file does not exist" echo "************************************************************************" elif (test "`diff --brief $file ../$file`" != "") then echo "************************************************************************" echo "diff $1/$file src/$file " echo "************************************************************************" diff $file ../$file fi done fi fi