diff --git a/Makefile.conf.in b/Makefile.conf.in index b70654c9760ae8081eac15d963ac9b96a9a98727..7119fa9504360d89ec5aacd9104d8c37e9332e4e 100644 --- a/Makefile.conf.in +++ b/Makefile.conf.in @@ -18,3 +18,12 @@ program_transform_name=@program_transform_name@ program_can_run_mpi=@program_can_run_mpi@ program_can_run=@program_can_run@ LD_RO=@LD_RO@ +exec_prefix="@exec_prefix@" +bindir="@bindir@" +libdir="@libdir@" +includedir="@includedir@" +datarootdir="@datarootdir@" +datadir="@datadir@" +docdir="${datarootdir}/doc/@program_name@" +htmldir="@htmldir@" +program_name="@program_name@" diff --git a/configure b/configure index b5fccae4f75e0ac264f7546b03dffa2138e165cf..f2544f37705d869fd54660bd113381d5bcdccc1e 100755 --- a/configure +++ b/configure @@ -621,6 +621,7 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS LIBOBJS build_dir +program_name LD_RO program_can_run_mpi program_can_run diff --git a/configure.ac b/configure.ac index 1f81d66db5456c29d45da8c2a6732ca00fac852a..a91dadcecd56afcd68f80d00c35cf30a9302cecf 100644 --- a/configure.ac +++ b/configure.ac @@ -715,6 +715,7 @@ AC_ARG_PROGRAM # version modified to work in shell script instead of makefile: program_transform_name_sh=$(echo "${program_transform_name}" | sed 's:\$\$:$:g') program_name=$(echo plumed | sed "$program_transform_name_sh") +AC_SUBST(program_name) if test "$(echo "$program_name" | tr '[A-Z]' '[a-z]')" != "$(echo "$program_name" | tr '[A-Z]' '[a-z]' | sed 's/kernel$//')" ; then AC_MSG_ERROR([$program_name is not a valid program name (should not terminate with Kernel)]) diff --git a/include/plumed b/include/plumed new file mode 120000 index 0000000000000000000000000000000000000000..5cd551cf2693e4b4f65d7954ec621454c2b20326 --- /dev/null +++ b/include/plumed @@ -0,0 +1 @@ +../src \ No newline at end of file diff --git a/patches/patch.sh b/patches/patch.sh index dafd2525f95c89d7c30e8b6836d144b161e04188..0aa5cac5fe1b738a015d5b9de222777d47d5f904 100755 --- a/patches/patch.sh +++ b/patches/patch.sh @@ -237,7 +237,7 @@ case "$action" in plumed_before_patch fi test -n "$quiet" || echo "Linking Plumed.h and Plumed.inc ($mode mode)" - ln -s "$PLUMED_ROOT/src/wrapper/Plumed.h" + ln -s "$PLUMED_INCLUDEDIR/$PLUMED_PROGRAM_NAME/wrapper/Plumed.h" Plumed.h ln -s "$PLUMED_ROOT/src/lib/Plumed.inc.$mode" Plumed.inc ln -s "$PLUMED_ROOT/src/lib/Plumed.cmake.$mode" Plumed.cmake diff --git a/src/cltools/Info.cpp b/src/cltools/Info.cpp index 9ed205ef07aaa1a707d8dada2376b6886e8008a4..d2238c7d075eb109e5c3b7ceea2a5f54f042577a 100644 --- a/src/cltools/Info.cpp +++ b/src/cltools/Info.cpp @@ -91,8 +91,8 @@ int Info::main(FILE* in, FILE*out,Communicator& pc){ bool printgitversion; parseFlag("--git-version",printgitversion); if(printroot) fprintf(out,"%s\n",config::getPlumedRoot().c_str()); if(printconfiguration) fprintf(out,"%s",config::getMakefile().c_str()); - std::string userdoc=config::getPlumedRoot()+"user-doc/html/index.html"; - std::string developerdoc=config::getPlumedRoot()+"developer-doc/html/index.html"; + std::string userdoc=config::getPlumedHtmldir()+"/user-doc/html/index.html"; + std::string developerdoc=config::getPlumedHtmldir()+"/developer-doc/html/index.html"; if(printuserdoc) fprintf(out,"%s\n",userdoc.c_str()); if(printdeveloperdoc) fprintf(out,"%s\n",developerdoc.c_str()); if(printversion) fprintf(out,"%s\n",config::getVersion().c_str()); diff --git a/src/config/Config.cpp.in b/src/config/Config.cpp.in index 66c391c02521d8844393a037dd2df3bb0cdf2389..6d0701a3c8e2bb186b1d94c2da3fe13df02d451f 100644 --- a/src/config/Config.cpp.in +++ b/src/config/Config.cpp.in @@ -47,6 +47,50 @@ std::string getPlumedRoot(){ return ss; } +std::string getPlumedHtmldir(){ + if(!isInstalled()) return getPlumedRoot(); + char *env = std::getenv("PLUMED_HTMLDIR"); + std::string ss; + if( env == NULL) { + ss="@htmldir@"; + } else { + ss=std::string( env ); + } + return ss; +} + +std::string getPlumedIncludedir(){ + if(!isInstalled()) return getPlumedRoot()+"/include"; + char *env = std::getenv("PLUMED_INCLUDEDIR"); + std::string ss; + if( env == NULL) { + ss="@includedir@"; + } else { + ss=std::string( env ); + } + return ss; +} + +std::string getPlumedProgramName(){ + if(!isInstalled()) return "plumed"; + char *env = std::getenv("PLUMED_PROGRAM_NAME"); + std::string ss; + if( env == NULL) { + ss="@program_name@"; + } else { + ss=std::string( env ); + } + return ss; +} + +std::string getEnvCommand(){ + return "env PLUMED_ROOT=\""+getPlumedRoot()+"\""+ + " env PLUMED_HTMLDIR=\""+getPlumedHtmldir()+"\""+ + " env PLUMED_INCLUDEDIR=\""+getPlumedIncludedir()+"\""+ + " env PLUMED_PROGRAM_NAME=\""+getPlumedProgramName()+"\""+ + " env PLUMED_IS_INSTALLED=\""+(@ISINSTALLED@?"yes":"no")+"\""; +} + std::string getVersion(){ return PLUMED_VERSION_SHORT; } diff --git a/src/config/Config.h b/src/config/Config.h index edf1b00d4d43ef64d1a9d338303f265e8d05a879..76bf723e7f325c38d391d3dc7bc591506fd43041 100644 --- a/src/config/Config.h +++ b/src/config/Config.h @@ -31,6 +31,14 @@ std::string getSoExt(); std::string getPlumedRoot(); +std::string getPlumedHtmldir(); + +std::string getPlumedIncludedir(); + +std::string getPlumedProgramName(); + +std::string getEnvCommand(); + std::string getMakefile(); std::string getVersion(); diff --git a/src/config/Makefile b/src/config/Makefile index fae0e2748e86050caf2649dfa39cc557dae3d777..5fb978fe0e229da4c0b712766b786b4f1c5936e5 100644 --- a/src/config/Makefile +++ b/src/config/Makefile @@ -7,36 +7,45 @@ ifndef program_transform_name program_transform_name=s,x,x, endif -# default target .PHONY: all obj +ifdef PLUMED_FORCE +.PHONY: ConfigInstall.cpp Config.cpp version.h +endif + +# default target all: - @echo "Updating ConfigInstall.cpp" - @sed "s/@SOEXT@/$(SOEXT)/g" Config.cpp.in | \ - sed "s/@ISINSTALLED@/true/g" | \ - env prefix="${prefix}" env program_transform_name="${program_transform_name}" ../maketools/update-plumedroot.sh ConfigInstall.cpp - @echo "Updating version file" - @ ../maketools/update-version.sh version.h - $(MAKE) do-all + $(MAKE) PLUMED_FORCE=yes ConfigInstall.cpp Config.cpp version.h + $(MAKE) Config.o ConfigInstall.o compile_options.sh obj: all -do-all: Config.o ConfigInstall.o compile_options.sh - make ConfigInstall.o +version.h: + @echo "Updating version.h" + @ ../maketools/update-version.sh version.h -ConfigInstall.cpp: +ConfigInstall.cpp: Config.cpp.in @echo "Updating ConfigInstall.cpp" @sed "s/@SOEXT@/$(SOEXT)/g" Config.cpp.in | \ sed "s/@ISINSTALLED@/true/g" | \ - ../maketools/update-plumedroot.sh ConfigInstall.cpp - @echo "Updating version file" - @ ../maketools/update-version.sh version.h + sed "s|@PLUMED_ROOT@|$(libdir)/$(program_name)|g" | \ + sed "s|@htmldir@|$(htmldir)|g" | \ + sed "s|@includedir@|$(includedir)|g" | \ + sed "s|@program_name@|$(program_name)|g" | \ + sed "s|@libdir@|$(libdir)|g" > $@~ + cmp -s $@~ $@ || cp $@~ $@ + rm $@~ # file to import compilation options inside c++ -Config.cpp: Config.cpp.in Config.h - @echo Building Config.cpp, a object containing configuration infos +Config.cpp: Config.cpp.in + @echo "Updating Config.cpp" @sed "s/@SOEXT@/$(SOEXT)/g" $< | \ sed "s/@ISINSTALLED@/false/g" | \ - sed "s|@PLUMED_ROOT@|$(CURDIR:src/config=)|g" > $@ + sed "s|@htmldir@|xxxxNAxxxx|g" | \ + sed "s|@includedir@|xxxxNAxxxx|g" | \ + sed "s|@program_name@|xxxxNAxxxx|g" | \ + sed "s|@PLUMED_ROOT@|$(CURDIR:src/config=)|g" > $@~ + cmp -s $@~ $@ || cp $@~ $@ + rm $@~ links: @echo Nothing to do in $(CURDIR) @@ -51,7 +60,7 @@ Makefile.conf.xxd: ../../Makefile.conf # file to import compilation options inside a bash script compile_options.sh: @echo Building compile_options.sh, a sourceable bash script with some compilation options - @echo "compile='"$(CXX) -c -I'"$$PLUMED_ROOT"'/src $(CPPFLAGS) $(CXXFLAGS) -o"'" > $@ + @echo "compile='"$(CXX) -c -I'"$$PLUMED_INCLUDEDIR/$$PLUMED_PROGRAM_NAME"'/ $(CPPFLAGS) $(CXXFLAGS) -o"'" > $@ @echo "link='"$(LDSO) -o"'" >> $@ @echo "soext='"$(SOEXT)"'" >> $@ diff --git a/src/core/CLToolMain.cpp b/src/core/CLToolMain.cpp index 891920ea7422ce79468f55ef9860fe77ab0c6d8c..0e67b25acf020abda9db376f3b7d5a56fe9f704c 100644 --- a/src/core/CLToolMain.cpp +++ b/src/core/CLToolMain.cpp @@ -210,7 +210,7 @@ int CLToolMain::run(int argc, char **argv,FILE*in,FILE*out,Communicator& pc){ fprintf(out," plumed %s\n", manual.c_str()); } for(unsigned j=0;j<availableShell.size();++j){ - string cmd="env PLUMED_ROOT=\""+root+"\" \""+root+"/scripts/"+availableShell[j]+".sh\" --description"; + string cmd=config::getEnvCommand()+" \""+root+"/scripts/"+availableShell[j]+".sh\" --description"; FILE *fp=popen(cmd.c_str(),"r"); string line,manual; while(Tools::getline(fp,line))manual+=line; @@ -241,7 +241,7 @@ int CLToolMain::run(int argc, char **argv,FILE*in,FILE*out,Communicator& pc){ if(find(availableShell.begin(),availableShell.end(),command)!=availableShell.end()){ plumed_massert(in==stdin,"shell tools can only work on stdin"); plumed_massert(out==stdout,"shell tools can only work on stdin"); - string cmd="env PLUMED_ROOT=\""+root+"\" \""+root+"/scripts/"+command+".sh\""; + string cmd=config::getEnvCommand()+" \""+root+"/scripts/"+command+".sh\""; for(int j=i+1;j<argc;j++) cmd+=string(" ")+argv[j]; system(cmd.c_str()); return 0; diff --git a/src/lib/.gitignore b/src/lib/.gitignore index 57494398f40b13688c8fd7f1a398c92681d23711..f1672ee0ab9235fa3bd2fad5854d474b926dbb5b 100644 --- a/src/lib/.gitignore +++ b/src/lib/.gitignore @@ -3,3 +3,4 @@ /compile_options.sh /plumed-* /plumed +/install diff --git a/src/lib/Makefile b/src/lib/Makefile index dc6cd7301e68827eb4363d39b51910ad12770492..514c8d197d37bb394039655d18d4c78841f2c16f 100644 --- a/src/lib/Makefile +++ b/src/lib/Makefile @@ -10,9 +10,6 @@ DIRSLINKS:=$(addsuffix .links,$(DIRS)) # include the machine dependent configuration -include ../../Makefile.conf -# include installation info --include ../config/install.conf - # if machine dependent configuration has been found: ifdef GCCDEP @@ -38,6 +35,13 @@ XXX := $(SRC_KERNEL:.cpp=.o) OBJ_KERNEL := $(XXX:.c=.o) ALL_OBJ := $(OBJ_KERNEL) $(OBJ_WRAPPER) $(OBJ_DYNAMIC_WRAPPER) $(OBJ_MAIN) +# when calling install-build, libraries in install should be built. +ifeq ($(PLUMED_INSTALL),Install) + PLUMED_LIBDIR:=install/ +else + PLUMED_LIBDIR:= +endif + # plumed kernel PLUMED_KERNEL := $(PLUMED_LIBDIR)libplumedKernel.$(SOEXT) @@ -54,130 +58,167 @@ PLUMED_MAIN_STATIC := $(PLUMED_LIBDIR)plumed PLUMED_MAIN_SHARED := $(PLUMED_LIBDIR)plumed-shared PLUMED_MAIN_RUNTIME := $(PLUMED_LIBDIR)plumed-runtime -ifdef PLUMED_LIBDIR_NODEST - PLUMED_ROOT :="$(PLUMED_LIBDIR_NODEST)../../" -else - PLUMED_ROOT :="$(realpath ../../)" -endif - -.PHONY: all links $(DIRS) $(DIRSLINKS) all-static $(PLUMED_LIBDIR)Plumed.cmake $(PLUMED_LIBDIR)Plumed.inc -ifdef SOEXT +.PHONY: all links $(DIRS) $(DIRSLINKS) all-static $(PLUMED_LIBDIR)Plumed.cmake $(PLUMED_LIBDIR)Plumed.inc install $(PLUMED_SCRIPTS_EXE) all: $(MAKE) dirslinks $(MAKE) dirs +ifdef SOEXT $(MAKE) lib else -all: - $(MAKE) all-static -endif - -all-static: - $(MAKE) dirslinks - $(MAKE) dirs $(MAKE) lib-static +endif +ifneq ($(PLUMED_INSTALL),Install) + $(MAKE) install-build +endif dirs: @echo "*** Compiling all directories ***" $(MAKE) $(DIRS) +install-build: + mkdir -p install/ + $(MAKE) PLUMED_INSTALL=Install all +ifdef LD_RO + $(LD_RO) install/kernel.o $(OBJ_KERNEL) +endif +# modulefile + @cat modulefile.in | \ + sed "s|@_SOEXT_@|$(SOEXT)|" | \ + sed "s|@_program_name_@|$(program_name)|" | \ + sed "s|@_libdir_@|$(libdir)|" | \ + sed "s|@_bindir_@|$(bindir)|" | \ + sed "s|@_includedir_@|$(includedir)|" \ + > install/modulefile install: +ifdef PLUMED_PREFIX + @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" + @echo "WARNING: using PLUMED_PREFIX variable is not allowed anymore" + @echo " please use one of the following choices:" + @echo " (1) at configure time:" + @echo " ./configure --prefix=$(PLUMED_PREFIX)" + @echo " (2) or later, at install time:" + @echo " make install prefix=$(PLUMED_PREFIX)" + @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" +endif +ifdef PLUMED_LIBSUFFIX + @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" + @echo "WARNING: using PLUMED_LIBSUFFIX variable is not allowed anymore" + @echo " please use the following option at configure time" + @echo " ./configure --program-suffix='_$(PLUMED_LIBSUFFIX)'" + @echo " there is no way to change the suffix at install time" + @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" +endif cd ../config ; $(MAKE) -# two steps to be sure that ../config/install.conf is up to date - $(MAKE) install-do - -install-do: $(MAKE) uninstall - mkdir -p $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin - mkdir -p $(DESTDIR)$(PLUMED_INSTALL_ROOT)/src/lib - mkdir -p $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/include/$(PLUMED_PROGRAM_NAME) - mkdir -p $(DESTDIR)$(PLUMED_INSTALL_ROOT)/obj + mkdir -p $(DESTDIR)$(bindir) + mkdir -p $(DESTDIR)$(libdir) + mkdir -p $(DESTDIR)$(includedir)/$(program_name) + mkdir -p $(DESTDIR)$(libdir)/$(program_name)/obj + mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/lib + mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/config + mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/colvar # rebuild libraries and main using new target dir - $(MAKE) PLUMED_LIBDIR=$(DESTDIR)$(PLUMED_INSTALL_ROOT)/src/lib/ PLUMED_LIBDIR_NODEST=$(PLUMED_INSTALL_ROOT)/src/lib/ PLUMED_INSTALL=Install all -# copy scripts, required .h, .cpp, compile_options.sh and documentation: - cd ../../ ; tar cf - patches scripts src/wrapper/Plumed.h src/colvar/Template.cpp *-doc/html *-doc/regtests *-doc/manual.pdf | tar xf - -C $(DESTDIR)$(PLUMED_INSTALL_ROOT)/ - mkdir -p $(DESTDIR)$(PLUMED_INSTALL_ROOT)/src/config/ - sed 's|-I"$$PLUMED_ROOT"/src|-I"$$PLUMED_ROOT"/../../include/$(PLUMED_PROGRAM_NAME)|' ../config/compile_options.sh > $(DESTDIR)$(PLUMED_INSTALL_ROOT)/src/config/compile_options.sh + $(MAKE) install-build +# copy documentation: + if test -d ../../user-doc/html ; then mkdir -p $(DESTDIR)$(htmldir) && cd ../../ && tar cf - user-doc/html | tar xf - -C $(DESTDIR)$(htmldir)/ ; fi + if test -d ../../developer-doc/html ; then mkdir -p $(DESTDIR)$(htmldir) && cd ../../ && tar cf - developer-doc/html | tar xf - -C $(DESTDIR)$(htmldir)/ ; fi + if test -f ../../user-doc/manual.pdf ; then mkdir -p $(DESTDIR)$(htmldir)/user-doc && cp ../../user-doc/manual.pdf $(DESTDIR)$(htmldir)/user-doc/ ; fi +# copy patches and scripts + cd ../../ ; tar cf - patches scripts | tar xf - -C $(DESTDIR)$(libdir)/$(program_name)/ +# copy Template.cpp file (we leave it in src/colvar/ for backward compatibility) + cp ../colvar/Template.cpp $(DESTDIR)$(libdir)/$(program_name)/src/colvar/ +# copy compile_options.sh file (we leave it in src/colvar/ for backward compatibility) + cp ../config/compile_options.sh $(DESTDIR)$(libdir)/$(program_name)/src/config/compile_options.sh ifdef LD_RO - $(LD_RO) $(DESTDIR)$(PLUMED_INSTALL_ROOT)/obj/kernel.o $(OBJ_KERNEL) + cp install/kernel.o $(DESTDIR)$(libdir)/$(program_name)/obj/kernel.o else - ../maketools/copyobjects $(DESTDIR)$(PLUMED_INSTALL_ROOT)/obj/k $(OBJ_KERNEL) + ../maketools/copyobjects $(DESTDIR)$(libdir)/$(program_name)/obj/k $(OBJ_KERNEL) endif - cp $(OBJ_WRAPPER) $(DESTDIR)$(PLUMED_INSTALL_ROOT)/obj/PlumedStatic.o - cp $(OBJ_DYNAMIC_WRAPPER) $(DESTDIR)$(PLUMED_INSTALL_ROOT)/obj/Plumed.o + cp $(OBJ_WRAPPER) $(DESTDIR)$(libdir)/$(program_name)/obj/PlumedStatic.o + cp $(OBJ_DYNAMIC_WRAPPER) $(DESTDIR)$(libdir)/$(program_name)/obj/Plumed.o # also copy .h files into include/ dir - cd ../../src ; tar cf - */*.h */*/*.h | tar xf - -C $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/include/$(PLUMED_PROGRAM_NAME)/ -# modulefile - @sed "s|@_PREFIX_@|$(PLUMED_INSTALL_PREFIX)|" modulefile.in | sed "s|@_SOEXT_@|$(SOEXT)|" | sed "s|@_PROGNAME_@|$(PLUMED_PROGRAM_NAME)|" > $(DESTDIR)$(PLUMED_INSTALL_ROOT)/src/lib/modulefile -# install links - cd $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin/ && ln -s ../lib/$(PLUMED_PROGRAM_NAME)/src/lib/plumed $(PLUMED_PROGRAM_NAME) - cd $(DESTDIR)$(PLUMED_INSTALL_ROOT) && for file in $(PLUMED_SCRIPTS) ; do ln -s src/lib/plumed-$$file plumed-$$file ; done - cd $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin/ && ln -s ../lib/$(PLUMED_PROGRAM_NAME)/src/lib/plumed-patch $(PLUMED_PROGRAM_NAME)-patch + cd ../../src ; tar cf - */*.h */*/*.h | tar xf - -C $(DESTDIR)$(includedir)/$(program_name)/ +# install executable + cp install/plumed $(DESTDIR)$(bindir)/$(program_name) +# patch file for cross compiling + cp install/plumed-patch $(DESTDIR)$(bindir)/$(program_name)-patch +# copy include files for cmake and make +# we leave it in src/lib/ for backward compatibility + cp install/Plumed.cmake* $(DESTDIR)$(libdir)/$(program_name)/src/lib/ + cp install/Plumed.inc* $(DESTDIR)$(libdir)/$(program_name)/src/lib/ +# other shell-based cltools are copied + for file in $(PLUMED_SCRIPTS) ; do cp install/plumed-$$file $(DESTDIR)$(libdir)/$(program_name)/plumed-$$file ; done ifdef SOEXT - cd $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/lib/ && ln -s $(PLUMED_PROGRAM_NAME)/src/lib/libplumed.$(SOEXT) lib$(PLUMED_PROGRAM_NAME).$(SOEXT) - cd $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/lib/ && ln -s $(PLUMED_PROGRAM_NAME)/src/lib/libplumedKernel.$(SOEXT) lib$(PLUMED_PROGRAM_NAME)Kernel.$(SOEXT) + cp install/libplumed.$(SOEXT) $(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT) + cp install/libplumedKernel.$(SOEXT) $(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT) endif - chmod -R go+rX,go-w $(DESTDIR)$(PLUMED_INSTALL_ROOT) - chmod -R go+rX,go-w $(DESTDIR)$(PLUMED_INSTALL_ROOT)/plumed-* - chmod -R go+rX,go-w $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/include/$(PLUMED_PROGRAM_NAME) - chmod -R go+rX,go-w $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin/$(PLUMED_PROGRAM_NAME) +# modulefile + cp install/modulefile $(DESTDIR)$(libdir)/$(program_name)/src/lib/modulefile +# making everything visible: + chmod -R go+rX,go-w $(DESTDIR)$(libdir)/$(program_name) + chmod -R go+rX,go-w $(DESTDIR)$(includedir)/$(program_name) + chmod -R go+rX,go-w $(DESTDIR)$(bindir)/$(program_name) + chmod -R go+rX,go-w $(DESTDIR)$(bindir)/$(program_name)-patch @echo @echo "*** PLUMED has been installed ***" @echo ifdef DESTDIR @echo "WARNING: Staged install with DESTDIR = $(DESTDIR)" endif - @echo "Install prefix : $(PLUMED_INSTALL_PREFIX)" - @echo "Full name : $(PLUMED_PROGRAM_NAME)" + @echo "Install prefix : $(prefix)" + @echo "Full name : $(program_name)" @echo @echo "Setup your environment" - @echo "- Ensure this is in your execution path : $(PLUMED_INSTALL_PREFIX)/bin" - @echo "- Ensure this is in your include path : $(PLUMED_INSTALL_PREFIX)/include" + @echo "- Ensure this is in your execution path : $(bindir)" + @echo "- Ensure this is in your include path : $(includedir)" ifdef SOEXT - @echo "- Ensure this is in your library path : $(PLUMED_INSTALL_PREFIX)/lib" + @echo "- Ensure this is in your library path : $(libdir)" @echo "For runtime binding:" - @echo "- Set this environment variable : PLUMED_KERNEL=$(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME)Kernel.$(SOEXT)" + @echo "- Set this environment variable : PLUMED_KERNEL=$(libdir)/lib$(program_name)Kernel.$(SOEXT)" endif @echo @echo "To create a tcl module that sets all the variables above, use this one as a starting point:" - @echo "$(PLUMED_INSTALL_ROOT)/src/lib/modulefile" + @echo "$(libdir)/$(program_name)/modulefile" @echo @echo "To uninstall, remove the following files and directories:" - @echo $(PLUMED_INSTALL_ROOT) - @echo $(PLUMED_INSTALL_PREFIX)/include/$(PLUMED_PROGRAM_NAME) - @echo $(PLUMED_INSTALL_PREFIX)/bin/$(PLUMED_PROGRAM_NAME) - @echo $(PLUMED_INSTALL_PREFIX)/bin/$(PLUMED_PROGRAM_NAME)-patch + @echo $(libdir)/$(program_name) + @echo $(htmldir) + @echo $(includedir)/$(program_name) + @echo $(bindir)/$(program_name) + @echo $(bindir)/$(program_name)-patch ifdef SOEXT - @echo $(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME).$(SOEXT) - @echo $(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME)Kernel.$(SOEXT) + @echo $(libdir)/lib$(program_name).$(SOEXT) + @echo $(libdir)/lib$(program_name)Kernel.$(SOEXT) endif ifeq ($(program_can_run),no) - @echo "WARNING: $(PLUMED_PROGRAM_NAME) executable will not run on this machine" + @echo "WARNING: $(program_name) executable will not run on this machine" @echo "WARNING: to patch an MD code use 'plumed-patch'" - @echo "WARNING: a few other command line tools are avalable as $(PLUMED_INSTALL_ROOT)/plumed-*" + @echo "WARNING: a few other command line tools are avalable as $(libdir)/$(program_name)/plumed-*" else ifeq ($(program_can_run_mpi),no) - @echo "WARNING: $(PLUMED_PROGRAM_NAME) executable will not run on this machine" - @echo "WARNING: unless you invoke it as '$(PLUMED_PROGRAM_NAME) --no-mpi'" - @echo "WARNING: to patch an MD code now use '$(PLUMED_PROGRAM_NAME) --no-mpi patch'" + @echo "WARNING: $(program_name) executable will not run on this machine" + @echo "WARNING: unless you invoke it as '$(program_name) --no-mpi'" + @echo "WARNING: to patch an MD code now use '$(program_name) --no-mpi patch'" @echo "WARNING: (notice that MPI will be available anyway in the patched code)" - @echo "WARNING: all command line tools are available as '$(PLUMED_PROGRAM_NAME) --no-mpi name-of-the-tool'" - @echo "WARNING: e.g. '$(PLUMED_PROGRAM_NAME) --no-mpi driver'" + @echo "WARNING: all command line tools are available as '$(program_name) --no-mpi name-of-the-tool'" + @echo "WARNING: e.g. '$(program_name) --no-mpi driver'" endif uninstall: - rm -fr $(DESTDIR)$(PLUMED_INSTALL_ROOT) - rm -fr $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/include/$(PLUMED_PROGRAM_NAME) - rm -f $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin/$(PLUMED_PROGRAM_NAME) - rm -f $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/bin/$(PLUMED_PROGRAM_NAME)-patch - rm -f $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME).$(SOEXT) - rm -f $(DESTDIR)$(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME)Kernel.$(SOEXT) + rm -fr $(DESTDIR)$(libdir)/$(program_name) + rm -fr $(DESTDIR)$(htmldir) + rm -fr $(DESTDIR)$(includedir)/$(program_name) + rm -f $(DESTDIR)$(bindir)/bin/$(program_name) + rm -f $(DESTDIR)$(bindir)/bin/$(program_name)-patch + rm -f $(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT) + rm -f $(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT) $(DIRS): $(MAKE) -C $@ obj -.PHONY: lib lib-static lib-shared +.PHONY: lib lib-static lib-shared lib-install lib-static-install lib: lib-static lib-shared @@ -190,8 +231,24 @@ lib-shared: $(PLUMED_KERNEL) $(PLUMED_SHARED_OBJ) $(PLUMED_MAIN_SHARED) $(PLUMED $(PLUMED_SCRIPTS_EXE): @echo "#! /bin/bash" > $@ @echo "echo 'NOTE: shell only version, useful when plumed is cross compiled' >&2" >> $@ - @echo "export PLUMED_ROOT=\"\$${PLUMED_ROOT-$(PLUMED_ROOT)}\"" >> $@ +# The logic implemented here should be the same as in config/Config.cpp.in +# Please keep them consistent +ifeq ($(PLUMED_INSTALL),Install) +# If plumed is installed, single paths can be overridden using env vars + @echo "export PLUMED_IS_INSTALLED=yes" >> $@ + @echo "export PLUMED_ROOT=\"\$${PLUMED_ROOT-$(libdir)/$(program_name)}\"" >> $@ + @echo "export PLUMED_INCLUDEDIR=\"\$${PLUMED_INCLUDEDIR-$(includedir)}\"" >> $@ + @echo "export PLUMED_HTMLDIR=\"\$${PLUMED_HTMLDIR=$(htmldir)}\"" >> $@ + @echo "export PLUMED_PROGRAM_NAME=\"\$${PLUMED_PROGRAM_NAME-$(program_name)}\"" >> $@ + @echo "source \"\$$PLUMED_ROOT\"/scripts/$(subst plumed-,,$(@F)).sh" >> $@ +else + @echo "export PLUMED_IS_INSTALLED=no" >> $@ + @echo "export PLUMED_ROOT=\"\$${PLUMED_ROOT-$(realpath ../../)}\"" >> $@ + @echo "export PLUMED_INCLUDEDIR=\"\$${PLUMED_ROOT}/include\"" >> $@ + @echo "export PLUMED_HTMLDIR=\"\$${PLUMED_ROOT}\"" >> $@ + @echo "export PLUMED_PROGRAM_NAME=plumed" >> $@ @echo "source \"\$$PLUMED_ROOT\"/scripts/$(subst plumed-,,$(@F)).sh" >> $@ +endif chmod a+x $@ $(PLUMED_KERNEL):$(OBJ_KERNEL) @@ -200,7 +257,7 @@ $(PLUMED_KERNEL):$(OBJ_KERNEL) # it moves the presently compiled version out of the way then move it back # perhaps a cleaner solution is to use patchelf (linux) and install_name_tool (mac) # but I am not sure how that would be portable -ifdef DESTDIR +ifeq ($(PLUMED_INSTALL),Install) -test -f libplumedKernel.$(SOEXT) && mv libplumedKernel.$(SOEXT) .libplumedKernel.$(SOEXT) $(LDSO) -o libplumedKernel.$(SOEXT) $^ $(DYNAMIC_LIBS) mv libplumedKernel.$(SOEXT) $@ @@ -215,7 +272,7 @@ $(PLUMED_SHARED_OBJ): $(OBJ_KERNEL) $(OBJ_WRAPPER) # it moves the presently compiled version out of the way then move it back # perhaps a cleaner solution is to use patchelf (linux) and install_name_tool (mac) # but I am not sure how that would be portable -ifdef DESTDIR +ifeq ($(PLUMED_INSTALL),Install) -test -f libplumed.$(SOEXT) && mv libplumed.$(SOEXT) .libplumed.$(SOEXT) $(LDSO) -o libplumed.$(SOEXT) $^ $(DYNAMIC_LIBS) mv libplumed.$(SOEXT) $@ @@ -237,18 +294,18 @@ ifeq ($(PLUMED_INSTALL),Install) $(PLUMED_LIBDIR)Plumed.inc: @echo Building Plumed.inc - @echo "PLUMED_RUNTIME_LOAD=" $(PLUMED_INSTALL_ROOT)/obj/Plumed.o $(LIBS) $(LDFLAGS) > $@ + @echo "PLUMED_RUNTIME_LOAD=" $(libdir)/$(program_name)/obj/Plumed.o $(LIBS) $(LDFLAGS) > $@ ifdef LD_RO - @echo "PLUMED_STATIC_LOAD=" $(PLUMED_INSTALL_ROOT)/obj/kernel.o $(PLUMED_INSTALL_ROOT)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@ + @echo "PLUMED_STATIC_LOAD=" $(libdir)/$(program_name)/obj/kernel.o $(libdir)/$(program_name)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@ else - @echo "PLUMED_STATIC_LOAD=" $(shell ../maketools/listobjects $(PLUMED_INSTALL_ROOT)/obj/k $(OBJ_KERNEL)) $(PLUMED_INSTALL_ROOT)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@ + @echo "PLUMED_STATIC_LOAD=" $(shell ../maketools/listobjects $(libdir)/$(program_name)/obj/k $(OBJ_KERNEL)) $(libdir)/$(program_name)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@ endif - @echo "PLUMED_SHARED_LOAD=" $(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME).$(SOEXT) $(LIBS) $(LDFLAGS) >> $@ + @echo "PLUMED_SHARED_LOAD=" $(libdir)/lib$(program_name).$(SOEXT) $(LIBS) $(LDFLAGS) >> $@ @echo "PLUMED_RUNTIME_DEPENDENCIES=" >> $@ # when installing, it is sufficient to include dependence wrt a single object # indeed, the object are replaced all at the same time - @echo "PLUMED_STATIC_DEPENDENCIES=" $(PLUMED_INSTALL_ROOT)/obj/PlumedStatic.o >> $@ - @echo "PLUMED_SHARED_DEPENDENCIES=" $(PLUMED_INSTALL_PREFIX)/lib/lib$(PLUMED_PROGRAM_NAME).$(SOEXT) >> $@ + @echo "PLUMED_STATIC_DEPENDENCIES=" $(libdir)/$(program_name)/obj/PlumedStatic.o >> $@ + @echo "PLUMED_SHARED_DEPENDENCIES=" $(libdir)/lib$(program_name).$(SOEXT) >> $@ else Plumed.inc: @echo Building Plumed.inc @@ -316,6 +373,7 @@ clean: rm -f $(PLUMED_MAIN_STATIC) $(PLUMED_MAIN_SHARED) $(PLUMED_MAIN_RUNTIME) rm -f Plumed.inc* plumed-* Plumed.cmake* rm -f .lib* + rm -fr install/ dirslinks: @echo "*** Updating links to used modules in all directories ***" diff --git a/src/lib/modulefile.in b/src/lib/modulefile.in index 48d9ab9890bcf9646cb2a14437e1ba76b068ee87..fc264258ac87c22ea02f481f65cd4db8865297b5 100644 --- a/src/lib/modulefile.in +++ b/src/lib/modulefile.in @@ -2,14 +2,18 @@ # Manually add here dependencies and conflicts -# this is the prefix path, and should be set properly: -set prefix "@_PREFIX_@" +# this is the path for libraries +set libdir "@_libdir_@" +# this is the path for binaries +set bindir "@_bindir_@" +# this is the path for include files +set bindir "@_includedir_@" # this is the extension for dynamic libraries # if set to empty, switches off plumed library set soext "@_SOEXT_@" # this is the name of the plumed program # it is usually plumed -set progname "@_PROGNAME_@" +set progname "@_program_name_@" # everything past this line should not need any editing @@ -20,11 +24,11 @@ proc ModulesHelp { } { module-whatis "Adds paths for Plumed" # execution path -prepend-path PATH $prefix/bin +prepend-path PATH $bindir # include path -prepend-path CPATH $prefix/include/ -prepend-path INCLUDE $prefix/include/ +prepend-path CPATH $includedir +prepend-path INCLUDE $includedir # paths for libraries are only set if plumed is compiled as a dynamic library if { [ string length $soext ] != 0 } { @@ -36,8 +40,8 @@ if { [module-info mode load] && [ info exists ::env(PLUMED_KERNEL) ] } { } # library path -prepend-path LIBRARY_PATH $prefix/lib/ -prepend-path LD_LIBRARY_PATH $prefix/lib/ -prepend-path DYLD_LIBRARY_PATH $prefix/lib/ -setenv PLUMED_KERNEL $prefix/lib/lib${progname}Kernel.$soext +prepend-path LIBRARY_PATH $libdir +prepend-path LD_LIBRARY_PATH $libdir +prepend-path DYLD_LIBRARY_PATH $libdir +setenv PLUMED_KERNEL $libdir/lib${progname}Kernel.$soext } diff --git a/src/maketools/update-plumedroot.sh b/src/maketools/update-plumedroot.sh deleted file mode 100755 index 1a4f9325fb29dec5fb88c1962202308e22c152f0..0000000000000000000000000000000000000000 --- a/src/maketools/update-plumedroot.sh +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/bash - -test -n "$1" || { - echo "Usage: $0 outfile" - exit 1 -} - -# if environment variable "prefix" is set, use it. -# otherwise defaults to /usr/local -prefix="${prefix:=/usr/local}" - -# if environment variable PLUMED_PREFIX is set, -# override the present prefix -if test -n "$PLUMED_PREFIX" ; then - echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - echo "WARNING: using PLUMED_PREFIX variable is deprecated" - echo " please use one of the following choices:" - echo " (1) at configure time:" - echo " ./configure --prefix=$PLUMED_PREFIX" - echo " (2) or later, at install time:" - echo " make install prefix=$PLUMED_PREFIX" - echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" -# this will result in an error in a later version -# now we fall back to the previous behavior - prefix="${PLUMED_PREFIX}" -fi - -# if environment variable PLUMED_LIBSUFFIX is set, complain -if test -n "$PLUMED_LIBSUFFIX" ; then - echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - echo "WARNING: using PLUMED_LIBSUFFIX variable is deprecated, please use" - echo " ./configure --program-suffix='$PLUMED_LIBSUFFIX'" - echo " at configure time" - echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" -# this will result in an error in a later version -# now we fall back to the previous behavior - PLUMED_LIBSUFFIX="${PLUMED_LIBSUFFIX:=}" - test -n "$PLUMED_LIBSUFFIX" && PLUMED_LIBSUFFIX="_${PLUMED_LIBSUFFIX}" -fi - -PLUMED_PROGRAM_NAME="$(echo plumed | sed "${program_transform_name}")${PLUMED_LIBSUFFIX}" -PLUMED_ROOT="$prefix/lib/${PLUMED_PROGRAM_NAME}" - -{ -echo "PLUMED_INSTALL_ROOT=${PLUMED_ROOT}" -echo "PLUMED_INSTALL_PREFIX=$prefix" -echo "PLUMED_PROGRAM_NAME=${PLUMED_PROGRAM_NAME}" -} > install.conf - -sed "s|@PLUMED_ROOT@|${PLUMED_ROOT}|g" > $1~ - -cmp -s $1~ $1 || cp $1~ $1 -rm $1~ - - -