From 4cbfa99a22926d3f60b7756b808a417c445ef45c Mon Sep 17 00:00:00 2001
From: Joseph Mirabel <jmirabel@laas.fr>
Date: Tue, 28 Aug 2018 10:21:30 +0200
Subject: [PATCH] Add Makefile to ease installation from source.

---
 README.md    |  10 +++
 doc/Makefile | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 180 insertions(+)
 create mode 100644 doc/Makefile

diff --git a/README.md b/README.md
index 4e15e15..d7b7f08 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,16 @@ directory:
 Please note that CMake produces a `CMakeCache.txt` file which should
 be deleted to reconfigure a package from scratch.
 
+### Makefile
+
+A Makefile that installs the dependencies is provided for convinience. Please follow those steps:
+  - copy `doc/Makefile`,
+  - open and set the variable `SRC_DIR` and `INSTALL_DIR`,
+  - optionally, change `OSG_PACKAGE` and `QT_VERSION`,
+  - run `make all`
+
+Note that the environment variables `PATH`, `LD_LIBRARY_PATH` and `PKG_CONFIG_PATH` should include
+the path to the installation directory.
 
 ### Dependencies
 
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..440846d
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,170 @@
+#
+# Copyright (c) 2014 CNRS-LAAS
+# Author: Florent Lamiraux
+#
+
+HPP_REPO=https://github.com/humanoid-path-planner
+
+DISABLE_TESTS=OFF
+SRC_DIR="NOT_SET"
+INSTALL_DIR="NOT_SET"
+
+ifeq (${INSTALL_DIR}, "NOT_SET")
+  $(error INSTALL_DIR not set. Please open the Makefile and set it)
+endif
+ifeq (${SRC_DIR},"NOT_SET")
+  $(error SRC_DIR not set. Please open the Makefile and set it)
+endif
+
+BUILD_TYPE=Release
+ifeq (${BUILD_TYPE},Debug)
+  BUILD_FOLDER=build
+else
+  BUILD_FOLDER=build-rel
+	DISABLE_TESTS=ON
+endif
+
+#OSG_PACKAGE=OpenSceneGraph-dae-plugin
+OSG_PACKAGE=OpenSceneGraph-3.4.0
+
+WGET=wget --quiet
+UNZIP=unzip -qq
+TAR=tar
+GIT_QUIET=--quiet
+# Qt version should be either 4 or 5
+QT_VERSION=5
+INSTALL_DOCUMENTATION=ON
+
+collada-dom_branch=master
+collada-dom_repository=${HPP_REPO}
+collada-dom_extra_flags=-DBUILD_SHARED_LIBS=TRUE -DOPT_COLLADA15=FALSE
+
+OpenSceneGraph-dae-plugin_branch=master
+OpenSceneGraph-dae-plugin_repository=${HPP_REPO}
+OpenSceneGraph-dae-plugin_extra_flags= -DCOLLADA_DYNAMIC_LIBRARY=${INSTALL_DIR}/lib/libcollada14dom.so -DCOLLADA_INCLUDE_DIR=${INSTALL_DIR}/include/collada-dom
+
+OpenSceneGraph-3.4.0_extra_flags= -DDESIRED_QT_VERSION=${QT_VERSION} -DCOLLADA_DYNAMIC_LIBRARY=${INSTALL_DIR}/lib/libcollada14dom.so -DCOLLADA_INCLUDE_DIR=${INSTALL_DIR}/include/collada-dom -DLIB_POSTFIX=""
+
+gepetto-viewer_branch=devel
+gepetto-viewer_repository=${HPP_REPO}
+
+gepetto-viewer-corba_branch=devel
+gepetto-viewer-corba_repository=${HPP_REPO}
+ifeq (${QT_VERSION}, 5)
+  gepetto-viewer-corba_extra_flags= -DUSE_QT4=OFF
+endif
+
+pythonqt_branch=qt${QT_VERSION}
+pythonqt_repository=${HPP_REPO}
+pythonqt_extra_flags= -DPythonQt_Wrap_QtAll=ON -DPythonQt_Extensions=ON
+
+qgv_branch=devel
+qgv_repository=${HPP_REPO}
+
+all: gepetto-viewer-corba.install
+
+qgv.configure.dep: qgv.checkout
+pythonqt.configure.dep: pythonqt.checkout
+collada-dom.configure.dep: collada-dom.checkout
+OpenSceneGraph-dae-plugin.configure.dep: collada-dom.install \
+	OpenSceneGraph-dae-plugin.checkout
+OpenSceneGraph-3.4.0.configure.dep: collada-dom.install \
+	OpenSceneGraph-3.4.0.checkout
+gepetto-viewer.configure.dep: ${OSG_PACKAGE}.install \
+	gepetto-viewer.checkout
+gepetto-viewer-corba.configure.dep: gepetto-viewer.install \
+	gepetto-viewer-corba.checkout
+pythonqt.configure.dep: pythonqt.checkout
+
+status:
+	@for child_dir in $$(ls ${SRC_DIR}); do \
+		test -d "$$child_dir" || continue; \
+		test -d "$$child_dir/.git" || continue; \
+		${MAKE} "$$child_dir".status; \
+	done
+
+log:
+	@for child_dir in $$(ls ${SRC_DIR}); do \
+		test -d "$$child_dir" || continue; \
+		test -d "$$child_dir/.git" || continue; \
+		${MAKE} "$$child_dir".log; \
+	done
+
+update:
+	@for child_dir in $$(ls ${SRC_DIR}); do \
+		test -d "$$child_dir" || continue; \
+		test -d "$$child_dir/.git" || continue; \
+		${MAKE} "$$child_dir".update; \
+	done
+
+%.checkout:
+	if [ -d $(@:.checkout=) ]; then \
+		echo "$(@:.checkout=) already checkout out."; \
+	else \
+		git clone ${GIT_QUIET} --recursive -b ${$(@:.checkout=)_branch} ${$(@:.checkout=)_repository}/$(@:.checkout=); \
+	fi \
+
+%.update:
+	if [ "${$(@:.update=)_repository}" = "" ]; then \
+		echo "$(@:.update=) is not referenced"; \
+	else \
+		cd ${SRC_DIR}/$(@:.update=);\
+		git remote rm origin;\
+		git remote add origin ${$(@:.update=)_repository}/$(@:.update=);\
+		git fetch origin;\
+		git checkout -b bce46g origin/${$(@:.update=)_branch};\
+		git branch -D ${$(@:.update=)_branch};\
+		git checkout -b ${$(@:.update=)_branch} bce46g;\
+		git branch -D bce46g;\
+		git submodule update; \
+	fi
+
+
+%.configure: %.configure.dep
+	${MAKE} $(@:.configure=).configure_nodep
+
+%.configure_nodep:%.checkout
+	mkdir -p ${SRC_DIR}/$(@:.configure_nodep=)/${BUILD_FOLDER}; \
+	cd ${SRC_DIR}/$(@:.configure_nodep=)/${BUILD_FOLDER}; \
+	cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
+			-DINSTALL_DOCUMENTATION=${INSTALL_DOCUMENTATION} \
+			-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-g -O3 -DNDEBUG" \
+			-DDISABLE_TESTS=${DISABLE_TESTS} \
+			${$(@:.configure_nodep=)_extra_flags} ..
+
+%.install:%.configure
+	${MAKE} -C ${SRC_DIR}/$(@:.install=)/${BUILD_FOLDER} install
+
+%.install_nodep:%.configure_nodep
+	${MAKE} -C ${SRC_DIR}/$(@:.install_nodep=)/${BUILD_FOLDER} install
+
+%.uninstall:
+	${MAKE} -C ${SRC_DIR}/$(@:.uninstall=)/${BUILD_FOLDER} uninstall
+
+%.clean:
+	${MAKE} -C ${SRC_DIR}/$(@:.clean=)/${BUILD_FOLDER} clean
+
+%.very-clean:
+	rm -rf ${SRC_DIR}/$(@:.very-clean=)/${BUILD_FOLDER}/*
+
+%.status:
+	@cd ${SRC_DIR}/$(@:.status=); \
+	echo \
+	"\033[1;36m------- Folder $(@:.status=) ---------------\033[0m"; \
+	git --no-pager -c status.showUntrackedFiles=no status --short --branch;\
+
+%.log:
+	@cd ${SRC_DIR}/$(@:.log=); \
+	if [ -f .git/refs/heads/${$(@:.log=)_branch} ]; then \
+		echo -n "$(@:.log=): "; \
+		cat .git/refs/heads/${$(@:.log=)_branch}; \
+	fi
+
+OpenSceneGraph-3.4.0.checkout:
+	if [ -d $(@:.checkout=) ]; then \
+		echo "$(@:.checkout=) already checkout out."; \
+	else \
+		wget http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.4.0/source/OpenSceneGraph-3.4.0.zip;\
+		cd ${SRC_DIR}; unzip OpenSceneGraph-3.4.0.zip;\
+		rm -f OpenSceneGraph-3.4.0.zip;\
+	fi
-- 
GitLab