From 21c43f764413bf0535f5057f62f60ae6f722b4ff Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 21 Sep 2011 10:32:31 +0200
Subject: [PATCH] Added "plumed mklib" tool

A compile_options.sh file is generated by make in the src directory
and it is used to properly compile a .cpp into a .so (or .dylib on mac).
Just type "plumed mklib pippo.cpp". Still it should be improved in term
of linking of multiple .cpp files.
---
 src/.gitignore         |  1 +
 src/Makefile           | 10 +++++++++-
 tools/scripts/mklib.sh | 31 +++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)
 create mode 100755 tools/scripts/mklib.sh

diff --git a/src/.gitignore b/src/.gitignore
index 93cfd35e3..e239f3f24 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -2,3 +2,4 @@ Plumed.inc*
 PlumedConfig.h
 *.cdep
 *.cppdep
+/compile_options.sh
diff --git a/src/Makefile b/src/Makefile
index 4c2661e13..9c885e71d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -27,7 +27,9 @@ ALL_SRC_DEP=$(SRC_KERNEL:.cpp=.cppdep) $(SRC_WRAPPER:.cpp=.cppdep) $(SRC_DYNAMIC
 .PHONY: all clean
 
 ifdef GCCDEP
-all: libplumedKernel.$(SOEXT) libplumed.$(SOEXT) Plumed.o Plumed.inc Plumed.inc.runtime Plumed.inc.shared Plumed.inc.static
+all: libplumedKernel.$(SOEXT) libplumed.$(SOEXT) Plumed.o \
+     Plumed.inc Plumed.inc.runtime Plumed.inc.shared Plumed.inc.static \
+     compile_options.sh
 else
 all:
 	@echo No configuration available
@@ -46,6 +48,11 @@ libplumedKernel.$(SOEXT): $(OBJ_KERNEL)
 libplumed.$(SOEXT): $(OBJ_KERNEL) $(OBJ_WRAPPER)
 	$(LDSO) -o $@ $^ $(DYNAMIC_LIBS)
 
+compile_options.sh:
+	echo "compile='"$(CXX) -c -I$(realpath $(srcdir)) $(CPPFLAGS) $(CXXFLAGS)"'" > $@
+	echo "link='"$(LDSO) -o"'" >> $@
+	echo "soext='"$(SOEXT)"'" >> $@
+
 clean:
 	rm -f *.o
 	rm -f *.cdep
@@ -53,6 +60,7 @@ clean:
 	rm -f PlumedConfig.h
 	rm -f Plumed.inc*
 	rm -f *~
+	rm -f compile_options.sh
 ifdef SOEXT
 	rm -f *.$(SOEXT)
 endif
diff --git a/tools/scripts/mklib.sh b/tools/scripts/mklib.sh
new file mode 100755
index 000000000..f7728b2cc
--- /dev/null
+++ b/tools/scripts/mklib.sh
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+source $PLUMED_ROOT/src/compile_options.sh
+
+if [ "$1" = --description ] ; then
+  echo "compile a .cpp file into a shared library"
+  exit 0
+fi
+
+if [ $# != 1 ] || [[ "$1" != *.cpp ]] ;
+then
+  echo "ERROR"
+  echo "type 'plumed mklib file.cpp'"
+  exit 1
+fi
+
+
+file="$1"
+obj="${file%%.cpp}".o
+lib="${file%%.cpp}".$soext
+
+if [ ! -f "$file" ]
+then
+  echo "ERROR: I cannot find file $file"
+  exit 1
+fi
+
+$compile "$file" -o "$obj" && $link "$lib" "$obj"
+
+
+
-- 
GitLab