From 1fdd97bf8afe2e7d2ec4ef3a7e9266addfba0899 Mon Sep 17 00:00:00 2001
From: Jeong Han Lee <jeonghan.lee@gmail.com>
Date: Mon, 29 Jan 2018 17:56:53 +0100
Subject: [PATCH] update asyn to 4.32, and migrate to new E3

---
 .gitmodules                     |   4 -
 Makefile                        | 159 ++------------------------------
 asyn.Makefile                   |   6 +-
 configure/CONFIG                |  47 ++++++----
 configure/CONFIG_MODULE         |  14 +++
 configure/CONFIG_MODULE_DEV     |  17 ++++
 configure/CONFIG_OPTIONS        |  11 +++
 configure/E3/CONFIG_E3_MAKEFILE |  17 ++++
 configure/E3/CONFIG_E3_PATH     |  38 ++++++++
 configure/E3/CONFIG_EPICS       |  64 +++++++++++++
 configure/E3/CONFIG_EXPORT      |   9 ++
 configure/E3/CONFIG_REQUIRE     |   9 ++
 configure/E3/CONFIG_SUDO        |  23 +++++
 configure/E3/DEFINES_FT         |  24 +++++
 configure/E3/RULES_DB           |  16 ++++
 configure/E3/RULES_DEV          |  41 ++++++++
 configure/E3/RULES_E3           |  91 ++++++++++++++++++
 configure/E3/RULES_EPICS        |  14 +++
 configure/E3/RULES_VARS         |  20 ++++
 configure/RELEASE               |   5 +
 configure/RELEASE_DEV           |   5 +
 configure/RULES                 |  16 ++++
 e3-env                          |   1 -
 23 files changed, 476 insertions(+), 175 deletions(-)
 create mode 100644 configure/CONFIG_MODULE
 create mode 100644 configure/CONFIG_MODULE_DEV
 create mode 100644 configure/CONFIG_OPTIONS
 create mode 100644 configure/E3/CONFIG_E3_MAKEFILE
 create mode 100644 configure/E3/CONFIG_E3_PATH
 create mode 100644 configure/E3/CONFIG_EPICS
 create mode 100644 configure/E3/CONFIG_EXPORT
 create mode 100644 configure/E3/CONFIG_REQUIRE
 create mode 100644 configure/E3/CONFIG_SUDO
 create mode 100644 configure/E3/DEFINES_FT
 create mode 100644 configure/E3/RULES_DB
 create mode 100644 configure/E3/RULES_DEV
 create mode 100644 configure/E3/RULES_E3
 create mode 100644 configure/E3/RULES_EPICS
 create mode 100644 configure/E3/RULES_VARS
 create mode 100644 configure/RELEASE
 create mode 100644 configure/RELEASE_DEV
 create mode 100644 configure/RULES
 delete mode 160000 e3-env

diff --git a/.gitmodules b/.gitmodules
index 0e6bd41..4299bcb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "e3-env"]
-	path = e3-env
-	url = https://github.com/icshwi/e3-env
-	ignore = dirty
 [submodule "asyn"]
 	path = asyn
 	url = https://github.com/epics-modules/asyn
diff --git a/Makefile b/Makefile
index 2878009..35e24e1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
 #
+#  Copyright (c) 2017 - Present  Jeong Han Lee
 #  Copyright (c) 2017 - Present  European Spallation Source ERIC
 #
 #  The program is free software: you can redistribute
@@ -15,163 +16,15 @@
 #  this program. If not, see https://www.gnu.org/licenses/gpl-2.0.txt
 #
 # 
-# Author  : jhlee
-# email   : @esss.se
-# Date    : generated by 2017Oct30-2331-18CET
-# version : 0.0.0 
-#
-# template file is generated by prepare_module.bash with c9f902bf415d19da874c9c23469a31915da59d34
-#
+# Author  : Jeong Han Lee
+# email   : jeonghan.lee@gmail.com
+# Date    : 2018Jan29-1746-19CET
+# version : 0.0.1
 
 
 TOP:=$(CURDIR)
 
 include $(TOP)/configure/CONFIG
 
--include $(TOP)/$(E3_ENV_NAME)/$(E3_ENV_NAME)
--include $(TOP)/$(E3_ENV_NAME)/epics-community-env
-
-# Keep always the module up-to-date
-define git_update =
-@git submodule deinit -f $@/
-git submodule deinit -f $@/
-sed -i '/submodule/,$$d'  $(TOP)/.git/config
-rm -rf $(TOP)/.git/modules/$@
-git submodule init $@/
-git submodule update --init --recursive --recursive $@/.
-git submodule update --remote --merge $@/
-endef
-
-ifndef VERBOSE
-  QUIET := @
-endif
-
-ifdef DEBUG_SHELL
-  SHELL = /bin/sh -x
-endif
-
-
-# Pass necessary driver.makefile variables through makefile options
-#
-M_OPTIONS := -C $(EPICS_MODULE_SRC_PATH)
-M_OPTIONS += -f $(ESS_MODULE_MAKEFILE)
-M_OPTIONS += LIBVERSION="$(LIBVERSION)"
-M_OPTIONS += PROJECT="$(EPICS_MODULE_NAME)"
-M_OPTIONS += EPICS_MODULES="$(EPICS_MODULES)"
-M_OPTIONS += EPICS_LOCATION="$(EPICS_LOCATION)"
-M_OPTIONS += DEFAULT_EPICS_VERSIONS="$(DEFAULT_EPICS_VERSIONS)"
-M_OPTIONS += BUILDCLASSES="Linux"
-M_OPTIONS += DRV_USBTMC="$(DRV_USBTMC)"
-
-
-# # help is defined in 
-# # https://gist.github.com/rcmachado/af3db315e31383502660
-help:
-	$(info --------------------------------------- )	
-	$(info Available targets)
-	$(info --------------------------------------- )
-	$(QUIET) awk '/^[a-zA-Z\-\_0-9]+:/ {            \
-	  nb = sub( /^## /, "", helpMsg );              \
-	  if(nb == 0) {                                 \
-	    helpMsg = $$0;                              \
-	    nb = sub( /^[^:]*:.* ## /, "", helpMsg );   \
-	  }                                             \
-	  if (nb)                                       \
-	    print  $$1 "\t" helpMsg;                    \
-	}                                               \
-	{ helpMsg = $$0 }'                              \
-	$(MAKEFILE_LIST) | column -ts:	
-
-
-
-default: help
-
-
-install: uninstall
-	$(QUIET) sudo -E bash -c 'make $(M_OPTIONS) install'
-
-## Uninstall "Require" Module in order not to use it
-uninstall: conf
-	$(QUIET) sudo -E bash -c 'make $(M_OPTIONS) uninstall'
-
-
-## Build the EPICS Module
-build: conf
-	$(QUIET) make $(M_OPTIONS) build
-
-## clean, build, and install again.
-rebuild: clean build install
-
-## Clean the EPICS Module
-clean: conf
-	$(QUIET) make $(M_OPTIONS) clean
-
-## Show driver.makefile help
-help2:
-	$(QUIET) make $(M_OPTIONS) help
-
-#
-## Initialize EPICS BASE and E3 ENVIRONMENT Module
-init: git-submodule-sync $(EPICS_MODULE_SRC_PATH) $(E3_ENV_NAME)
-
-git-submodule-sync:
-	$(QUIET) git submodule sync
-
-$(EPICS_MODULE_SRC_PATH): 
-	$(QUIET) $(git_update)
-	cd $@ && git checkout $(EPICS_MODULE_TAG)
-
-checkout: 
-	cd $(EPICS_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
-
-
-$(E3_ENV_NAME): 
-	$(QUIET) $(git_update)
-
-
-## Print EPICS and ESS EPICS Environment variables
-env:
-	$(QUIET) echo ""
-
-	$(QUIET) echo "EPICS_MODULE_SRC_PATH       : "$(EPICS_MODULE_SRC_PATH)
-	$(QUIET) echo "ESS_MODULE_MAKEFILE         : "$(ESS_MODULE_MAKEFILE)
-	$(QUIET) echo "EPICS_MODULE_TAG            : "$(EPICS_MODULE_TAG)
-	$(QUIET) echo "LIBVERSION                  : "$(LIBVERSION)
-	$(QUIET) echo "PROJECT                     : "$(PROJECT)
-
-	$(QUIET) echo ""
-	$(QUIET) echo "----- >>>> EPICS BASE Information <<<< -----"
-	$(QUIET) echo ""
-	$(QUIET) echo "EPICS_BASE_TAG              : "$(EPICS_BASE_TAG)
-#	$(QUIET) echo "CROSS_COMPILER_TARGET_ARCHS : "$(CROSS_COMPILER_TARGET_ARCHS)
-	$(QUIET) echo ""
-	$(QUIET) echo "----- >>>> ESS EPICS Environment  <<<< -----"
-	$(QUIET) echo ""
-	$(QUIET) echo "EPICS_LOCATION              : "$(EPICS_LOCATION)
-	$(QUIET) echo "EPICS_MODULES               : "$(EPICS_MODULES)
-	$(QUIET) echo "DEFAULT_EPICS_VERSIONS      : "$(DEFAULT_EPICS_VERSIONS)
-	$(QUIET) echo "BASE_INSTALL_LOCATIONS      : "$(BASE_INSTALL_LOCATIONS)
-	$(QUIET) echo "REQUIRE_VERSION             : "$(REQUIRE_VERSION)
-	$(QUIET) echo "REQUIRE_PATH                : "$(REQUIRE_PATH)
-	$(QUIET) echo "REQUIRE_TOOLS               : "$(REQUIRE_TOOLS)
-	$(QUIET) echo "REQUIRE_BIN                 : "$(REQUIRE_BIN)
-	$(QUIET) echo ""
-
-conf:
-	$(QUIET) install -m 644 $(TOP)/$(ESS_MODULE_MAKEFILE)  $(EPICS_MODULE_SRC_PATH)/
-
-epics:
-	@echo "EPICS_BASE=$(COMMUNITY_EPICS_BASE)"   > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/RELEASE
-	@echo "INSTALL_LOCATION=$(M_ASYN)"           > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/CONFIG_SITE
-	@echo "LINUX_GPIB=NO"                       >> $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/CONFIG_SITE
-	sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH)"
-
-epics-clean:
-	sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH) clean"
-
-
-.PHONY: env $(E3_ENV_NAME) $(EPICS_MODULE_SRC_PATH) git-submodule-sync init help help2 build clean install uninstall conf rebuild epics epics-clean checkout
-
-
-
+include $(TOP)/configure/RULES
 
diff --git a/asyn.Makefile b/asyn.Makefile
index df2a631..59606a8 100644
--- a/asyn.Makefile
+++ b/asyn.Makefile
@@ -22,7 +22,7 @@
 
 where_am_I := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
 
-include $(REQUIRE_TOOLS)/driver.makefile
+include $(E3_REQUIRE_TOOLS)/driver.makefile
 
 
 USR_CFLAGS   += -Wno-unused-variable
@@ -302,3 +302,7 @@ $(DBDINC_DEPS): $(DBDINC_HDRS)
 	$(DBTORECORDTYPEH)  $(USR_DBDFLAGS) -o $@ $<
 
 
+
+# db rule is the default in RULES_E3, so add the empty one
+
+db:
diff --git a/configure/CONFIG b/configure/CONFIG
index 0671baa..00a13d4 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -1,16 +1,31 @@
-EPICS_MODULE_NAME:=asyn
-export EPICS_MODULE_TAG:=tags/R4-32
-export EPICS_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
-ESS_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
-export PROJECT:=$(EPICS_MODULE_NAME)
-export LIBVERSION:=4.32.0
-export E3_ENV_NAME:=e3-env
-# One should install libusb-1.0.0
-# Debian apt-get install libusb-1.0-0-dev libusb-1.0-0
-# USR_INCLUDES 
-# $ pkg-config --cflags libusb-1.0
-#   -I/usr/include/libusb-1.0
-# USR_LDFLAGS
-# $ pkg-config --libs libusb-1.0
-# $ -lusb-1.0 
-export DRV_USBTMC:=NO
+VARS_EXCLUDES := $(.VARIABLES)
+
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/RELEASE_DEV
+else
+include $(TOP)/configure/RELEASE
+endif
+
+# CONFIG=$(EPICS_BASE)/configure
+# include $(CONFIG)/CONFIG
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/CONFIG_MODULE_DEV
+else
+include $(TOP)/configure/CONFIG_MODULE
+endif
+
+
+-include $(TOP)/configure/CONFIG_OPTIONS
+
+
+## It is not necessary to modify the following files in most case.
+## Order is matter
+
+include $(TOP)/configure/E3/CONFIG_REQUIRE
+include $(TOP)/configure/E3/CONFIG_E3_PATH
+include $(TOP)/configure/E3/CONFIG_E3_MAKEFILE
+include $(TOP)/configure/E3/CONFIG_EPICS
+include $(TOP)/configure/E3/CONFIG_SUDO
+include $(TOP)/configure/E3/CONFIG_EXPORT
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
new file mode 100644
index 0000000..1e02d02
--- /dev/null
+++ b/configure/CONFIG_MODULE
@@ -0,0 +1,14 @@
+#
+EPICS_MODULE_NAME:=asyn
+EPICS_MODULE_TAG:=tags/R4-32
+#
+E3_MODULE_VERSION:=4.32.0
+
+
+#
+# In most case, we don't need to touch the following variables.
+#
+E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
+E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
+
diff --git a/configure/CONFIG_MODULE_DEV b/configure/CONFIG_MODULE_DEV
new file mode 100644
index 0000000..bd652d7
--- /dev/null
+++ b/configure/CONFIG_MODULE_DEV
@@ -0,0 +1,17 @@
+#
+EPICS_MODULE_NAME:=asyn
+EPICS_MODULE_TAG:=master
+#
+E3_MODULE_VERSION:=master
+
+
+#
+# In most case, we don't need to touch the following variables.
+#
+E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)-dev
+E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
+
+#export DEV_GIT_URL:="https://where your git repo"
+E3_MODULE_DEV_GITURL:="https://github.com/epics-modules/asyn"
+
diff --git a/configure/CONFIG_OPTIONS b/configure/CONFIG_OPTIONS
new file mode 100644
index 0000000..babc9f4
--- /dev/null
+++ b/configure/CONFIG_OPTIONS
@@ -0,0 +1,11 @@
+
+# One should install libusb-1.0.0
+# Debian apt-get install libusb-1.0-0-dev libusb-1.0-0
+# USR_INCLUDES 
+# $ pkg-config --cflags libusb-1.0
+#   -I/usr/include/libusb-1.0
+# USR_LDFLAGS
+# $ pkg-config --libs libusb-1.0
+# $ -lusb-1.0 
+export DRV_USBTMC:=NO
+
diff --git a/configure/E3/CONFIG_E3_MAKEFILE b/configure/E3/CONFIG_E3_MAKEFILE
new file mode 100644
index 0000000..ef3750a
--- /dev/null
+++ b/configure/E3/CONFIG_E3_MAKEFILE
@@ -0,0 +1,17 @@
+# Pass necessary driver.makefile variables through makefile options
+#
+
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS := -C $(E3_MODULE_SRC_PATH)
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += -f $(E3_MODULE_MAKEFILE)
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += LIBVERSION="$(E3_MODULE_VERSION)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += PROJECT="$(E3_MODULE_NAME)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += EPICS_MODULES="$(E3_MODULES_PATH)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += EPICS_LOCATION="$(EPICS_BASE)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += BUILDCLASSES="Linux"
+
+
+E3_MODULE_MAKE_CMDS:=make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS)
+
+
+VARS_EXCLUDES+=E3_REQUIRE_MAKEFILE_INPUT_OPTIONS
+
diff --git a/configure/E3/CONFIG_E3_PATH b/configure/E3/CONFIG_E3_PATH
new file mode 100644
index 0000000..d188961
--- /dev/null
+++ b/configure/E3/CONFIG_E3_PATH
@@ -0,0 +1,38 @@
+E3_MODULES_PATH:=$(E3_REQUIRE_LOCATION)/siteMods
+E3_SITEMODS_PATH:=$(E3_MODULES_PATH)
+E3_SITELIBS_PATH:=$(E3_REQUIRE_LOCATION)/siteLibs
+E3_SITEAPPS_PATH:=$(E3_REQUIRE_LOCATION)/siteApps
+
+
+E3_MODULES_INSTALL_LOCATION:=$(E3_SITEMODS_PATH)/$(E3_MODULE_NAME)/$(E3_MODULE_VERSION)
+
+
+E3_MODULES_INSTALL_LOCATION_INC:=$(E3_MODULES_INSTALL_LOCATION)/include
+E3_MODULES_INSTALL_LOCATION_DB :=$(E3_MODULES_INSTALL_LOCATION)/db
+E3_MODULES_INSTALL_LOCATION_BIN:=$(E3_MODULES_INSTALL_LOCATION)/bin
+
+
+E3_MODULES_INSTALL_LOCATION_INC_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_include
+E3_MODULES_INSTALL_LOCATION_DB_LINK :=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_db
+E3_MODULES_INSTALL_LOCATION_BIN_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_bin
+
+
+E3_MODULES_INSTALL_LOCATION_DBD:=$(E3_MODULES_INSTALL_LOCATION)/dbd/$(E3_MODULE_NAME).dbd
+E3_MODULES_INSTALL_LOCATION_DBD_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME).dbd.$(E3_MODULE_VERSION)
+
+
+
+# It is a bit weird, it would be better to implement within driver.makefile later
+# Assumption : we are using the same lib name from driver.makefile 
+E3_MODULES_LIBNAME:=lib$(E3_MODULE_NAME).so
+
+INSTALLED_EPICS_BASE_ARCHS_PATHS=$(sort $(dir $(wildcard $(EPICS_BASE)/bin/*/)))
+TEMP_INSTALLED_EPICS_BASE_ARCHS=$(INSTALLED_EPICS_BASE_ARCHS_PATHS:$(EPICS_BASE)/bin/%=%)
+INSTALLED_EPICS_BASE_ARCHS=$(TEMP_INSTALLED_EPICS_BASE_ARCHS:/=)
+
+
+
+### Exclude the following variables to display 
+VARS_EXCLUDES+=TEMP_INSTALLED_EPICS_BASE_ARCHS
+VARS_EXCLUDES+=INSTALLED_EPICS_BASE_ARCHS_PATHS
+
diff --git a/configure/E3/CONFIG_EPICS b/configure/E3/CONFIG_EPICS
new file mode 100644
index 0000000..c6516ed
--- /dev/null
+++ b/configure/E3/CONFIG_EPICS
@@ -0,0 +1,64 @@
+COMMUNITY_EPICS_MODULES:=$(EPICS_BASE)/epics-modules
+
+M_AUTOSAVE:=$(COMMUNITY_EPICS_MODULES)/autosave
+M_DEVLIB2:=$(COMMUNITY_EPICS_MODULES)/devlib2
+M_IOCSTATS:=$(COMMUNITY_EPICS_MODULES)/iocStats
+M_ASYN:=$(COMMUNITY_EPICS_MODULES)/asyn
+M_BUSY:=$(COMMUNITY_EPICS_MODULES)/busy
+M_MODBUS:=$(COMMUNITY_EPICS_MODULES)/modbus
+M_MRFIOC2:=$(COMMUNITY_EPICS_MODULES)/mrfioc2
+M_LUA:=$(COMMUNITY_EPICS_MODULES)/lua
+M_IPMICOMM:=$(COMMUNITY_EPICS_MODULES)/ipmiComm
+M_STREAM:=$(COMMUNITY_EPICS_MODULES)/stream
+M_CALC:=$(COMMUNITY_EPICS_MODULES)/calc
+M_MOTOR:=$(COMMUNITY_EPICS_MODULES)/motor
+M_SSCAN:=$(COMMUNITY_EPICS_MODULES)/sscan
+M_SNCSEQ:=$(COMMUNITY_EPICS_MODULES)/seq
+M_IP:=$(COMMUNITY_EPICS_MODULES)/ip
+M_IPAC:=$(COMMUNITY_EPICS_MODULES)/ipac
+M_ADSUPPORT:=$(COMMUNITY_EPICS_MODULES)/adsupport
+M_ADCORE:=$(COMMUNITY_EPICS_MODULES)/adcore
+
+
+
+
+export M_AUTOSAVE
+export M_DEVLIB2
+export M_IOCSTATS
+export M_ASYN
+export M_BUSY
+export M_MODBUS
+export M_MRFIOC2
+export M_LUA
+export M_IPMICOMM
+export M_STREAM
+export M_CALC
+export M_MOTOR
+export M_SSCAN
+export M_SNCSEQ
+export M_IP
+export M_IPAC
+export M_ADSUPPORT
+export M_ADCORE
+
+### Exclude the following variables to display 
+VARS_EXCLUDES+=COMMUNITY_EPICS_MODULES
+VARS_EXCLUDES+=M_AUTOSAVE
+VARS_EXCLUDES+=M_DEVLIB2
+VARS_EXCLUDES+=M_IOCSTATS
+VARS_EXCLUDES+=M_ASYN
+VARS_EXCLUDES+=M_BUSY
+VARS_EXCLUDES+=M_MODBUS
+VARS_EXCLUDES+=M_MRFIOC2
+VARS_EXCLUDES+=M_LUA
+VARS_EXCLUDES+=M_IPMICOMM
+VARS_EXCLUDES+=M_STREAM
+VARS_EXCLUDES+=M_CALC
+VARS_EXCLUDES+=M_MOTOR
+VARS_EXCLUDES+=M_SSCAN
+VARS_EXCLUDES+=M_SNCSEQ
+VARS_EXCLUDES+=M_IP
+VARS_EXCLUDES+=M_IPAC
+VARS_EXCLUDES+=M_ADSUPPORT
+VARS_EXCLUDES+=M_ADCORE
+
diff --git a/configure/E3/CONFIG_EXPORT b/configure/E3/CONFIG_EXPORT
new file mode 100644
index 0000000..447dd69
--- /dev/null
+++ b/configure/E3/CONFIG_EXPORT
@@ -0,0 +1,9 @@
+# Variables should be transferred to module_name.makefile
+
+EPICS_HOST_ARCH:=$(shell $(EPICS_BASE)/startup/EpicsHostArch.pl)
+
+export EPICS_BASE
+export EPICS_HOST_ARCH
+export E3_REQUIRE_TOOLS
+export E3_MODULE_VERSION
+
diff --git a/configure/E3/CONFIG_REQUIRE b/configure/E3/CONFIG_REQUIRE
new file mode 100644
index 0000000..4626515
--- /dev/null
+++ b/configure/E3/CONFIG_REQUIRE
@@ -0,0 +1,9 @@
+E3_REQUIRE_LOCATION:=$(EPICS_BASE)/$(E3_REQUIRE_NAME)/$(E3_REQUIRE_VERSION)
+
+E3_REQUIRE_BIN:=$(E3_REQUIRE_LOCATION)/bin
+E3_REQUIRE_TOOLS:=$(E3_REQUIRE_LOCATION)/tools
+E3_REQUIRE_LIB:=$(E3_REQUIRE_LOCATION)/lib
+E3_REQUIRE_DB:=$(E3_REQUIRE_LOCATION)/db
+E3_REQUIRE_DBD:=$(E3_REQUIRE_LOCATION)/dbd
+E3_REQUIRE_INC:=$(E3_REQUIRE_LOCATION)/include
+
diff --git a/configure/E3/CONFIG_SUDO b/configure/E3/CONFIG_SUDO
new file mode 100644
index 0000000..f4d2cb7
--- /dev/null
+++ b/configure/E3/CONFIG_SUDO
@@ -0,0 +1,23 @@
+# IF EPICS_BASE is not WRITABLE, SUDO and SUDOBASH should be used 
+# SUDO_INFO 1 : SUDO is needed (NOT writable)
+# SUDO_INFO 0 : SUDO is not needed
+SUDO_INFO := $(shell test -w $(EPICS_BASE) 1>&2 2> /dev/null; echo $$?)
+
+ifeq "$(SUDO_INFO)" "1"
+SUDO := sudo
+SUDOBASH = $(SUDO)
+SUDOBASH += -E
+SUDOBASH += bash -c
+endif    
+
+
+# Valid for only Development Mode, because we clone/remove them
+# See RULES_DEV
+# E3_MODULE_SRC_PATH_INFO 1 : the directory is not there
+# E3_MODULE_SRC_PATH_INFO 0 : the directory is there
+E3_MODULE_SRC_PATH_INFO := $(shell test -d $(E3_MODULE_SRC_PATH) 1>&2 2> /dev/null; echo $$?)
+
+ifeq "$(E3_MODULE_SRC_PATH_INFO)" "1"
+INIT_E3_MODULE_SRC = 1
+endif    
+
diff --git a/configure/E3/DEFINES_FT b/configure/E3/DEFINES_FT
new file mode 100644
index 0000000..5c0ccbb
--- /dev/null
+++ b/configure/E3/DEFINES_FT
@@ -0,0 +1,24 @@
+# Keep always the module up-to-date
+define git_update =
+git submodule deinit -f $@/
+sed -i '/submodule/,24465d'  $(TOP)/.git/config
+rm -rf $(TOP)/.git/modules/$@
+git submodule init $@/
+git submodule update --init --recursive $@/.
+git submodule update --remote --merge $@/
+endef
+
+ifndef VERBOSE
+  QUIET := @
+endif
+
+ifdef DEBUG_SHELL
+  SHELL = /bin/sh -x
+endif
+
+
+### Exclude the following variables to display 
+VARS_EXCLUDES+=git_update
+VARS_EXCLUDES+=QUIET
+VARS_EXCLUDES+=SHELL
+
diff --git a/configure/E3/RULES_DB b/configure/E3/RULES_DB
new file mode 100644
index 0000000..6251c25
--- /dev/null
+++ b/configure/E3/RULES_DB
@@ -0,0 +1,16 @@
+
+## This RULE should be used in case of inflating DB files
+## In this case, one should add db: rule in $(EPICS_MODULE_NAME).makefile
+## And add db in RULES_E3 also as follows:
+## install_module: uninstall db
+
+
+.PHONY: db
+
+###   ..... 
+
+db: conf
+	#install -m 644 $(TOP)/template/cpci-evg230-ess.substitutions   $(E3_MODULE_SRC_PATH)/evgMrmApp/Db/
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) db
+
+
diff --git a/configure/E3/RULES_DEV b/configure/E3/RULES_DEV
new file mode 100644
index 0000000..41f21d4
--- /dev/null
+++ b/configure/E3/RULES_DEV
@@ -0,0 +1,41 @@
+# -*- mode: Makefile;-*-
+
+.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean
+
+devvars: vars
+
+devenv: devvars
+
+devinit: git-submodule-sync
+	git clone $(E3_MODULE_DEV_GITURL) $(E3_MODULE_SRC_PATH)
+	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+
+
+ifeq "$(INIT_E3_MODULE_SRC)" "1"
+
+devbuild: nonexists
+devclean: nonexists
+devinstall: nonexists
+devrebuild: nonexists
+devuninstall: nonexists
+devdistclean: nonexists
+nonexists:
+	$(QUIET)echo ""
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo "          Could not find $(E3_MODULE_SRC_PATH) "
+	$(QUIET)echo "          Please make devinit first !          "
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ""
+else
+
+devbuild: build
+devclean: clean
+devinstall: install
+devrebuild: rebuild
+devuninstall: uninstall
+devdistclean: clean
+	$(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
+	rm -rf $(E3_MODULE_SRC_PATH)
+endif
+
+
diff --git a/configure/E3/RULES_E3 b/configure/E3/RULES_E3
new file mode 100644
index 0000000..4455305
--- /dev/null
+++ b/configure/E3/RULES_E3
@@ -0,0 +1,91 @@
+
+.PHONY: help default install uninstall build rebuild clean conf
+
+default: help
+
+
+# # help is defined in 
+# # https://gist.github.com/rcmachado/af3db315e31383502660
+help:
+	$(info --------------------------------------- )	
+	$(info Available targets)
+	$(info --------------------------------------- )
+	$(QUIET) awk '/^[a-zA-Z\-\_0-9]+:/ {            \
+	  nb = sub( /^## /, "", helpMsg );              \
+	  if(nb == 0) {                                 \
+	    helpMsg = $$0;                              \
+	    nb = sub( /^[^:]*:.* ## /, "", helpMsg );   \
+	  }                                             \
+	  if (nb)                                       \
+	    print  $$1 "\t" helpMsg;                    \
+	}                                               \
+	{ helpMsg = $$0 }'                              \
+	$(MAKEFILE_LIST) | column -ts:	
+
+
+
+## Install : $(E3_MODULE_NAME)
+install: install_module install_links
+
+#install_module: uninstall 
+install_module: uninstall db
+	$(QUIET) $(SUDOBASH) '$(E3_MODULE_MAKE_CMDS) install'
+
+## Uninstall : $(E3_MODULE_NAME)
+uninstall: conf
+	$(QUIET) $(SUDOBASH) '$(E3_MODULE_MAKE_CMDS) uninstall'
+
+## Build the EPICS Module : $(E3_MODULE_NAME)
+# Build always the Module with the EPICS_MODULES_TAG
+build: conf checkout
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) build
+
+
+## Clean, build, and install the EPICS Module : $(E3_MODULE_NAME)
+rebuild: clean build install
+
+
+## Clean : $(E3_MODULE_NAME)
+clean: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) clean
+
+
+## Copy $(E3_MODULE_MAKEFILE) into $(E3_MODULE_SRC_PATH)
+conf: 
+	$(QUIET) install -m 644 $(TOP)/$(E3_MODULE_MAKEFILE)  $(E3_MODULE_SRC_PATH)/
+
+
+.PHONY: init git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
+
+## Initialize : $(E3_MODULE_SRC_PATH) 
+init: git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
+
+git-submodule-sync:
+	$(QUIET) git submodule sync
+
+
+$(E3_MODULE_SRC_PATH): 
+	$(QUIET) $(git_update)
+
+checkout: 
+	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+
+
+
+# Create symbolic links in siteLibs
+
+.PHONY: install_links $(INSTALLED_EPICS_BASE_ARCHS)
+
+
+install_links: $(INSTALLED_EPICS_BASE_ARCHS)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_INC) $(E3_MODULES_INSTALL_LOCATION_INC_LINK)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_DB)  $(E3_MODULES_INSTALL_LOCATION_DB_LINK)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_BIN) $(E3_MODULES_INSTALL_LOCATION_BIN_LINK)
+	$(SUDO) ln -sf  $(E3_MODULES_INSTALL_LOCATION_DBD) $(E3_MODULES_INSTALL_LOCATION_DBD_LINK)
+
+
+$(INSTALLED_EPICS_BASE_ARCHS):
+	$(SUDO) mkdir -p $(E3_SITELIBS_PATH)/$@
+	$(SUDO) ln -sf $(E3_MODULES_INSTALL_LOCATION)/lib/$@/$(E3_MODULES_LIBNAME) $(E3_SITELIBS_PATH)/$@/$(E3_MODULE_NAME).lib.$(E3_MODULE_VERSION)
+
+
diff --git a/configure/E3/RULES_EPICS b/configure/E3/RULES_EPICS
new file mode 100644
index 0000000..4ee0dda
--- /dev/null
+++ b/configure/E3/RULES_EPICS
@@ -0,0 +1,14 @@
+# One should define the any dependency modules and EPICS base path
+# in the following directory
+
+.PHONY: epics epics-clean
+
+epics:
+	$(QUIET)echo "EPICS_BASE=$(EPICS_BASE)"       > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE
+#	$(QUIET)echo "INSTALL_LOCATION=$(M_DEVLIB2)"  > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
+	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH)"
+
+epics-clean:
+	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH) clean"
+
+
diff --git a/configure/E3/RULES_VARS b/configure/E3/RULES_VARS
new file mode 100644
index 0000000..e388285
--- /dev/null
+++ b/configure/E3/RULES_VARS
@@ -0,0 +1,20 @@
+
+E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARIABLES)))
+
+.PHONY : env vars header
+
+
+## Print interesting VARIABLES
+env: vars
+
+vars: header
+	$(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
+
+header:
+	$(QUIET)echo ""
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ">>>>     Current EPICS and E3 Envrionment Variables     <<<<"
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ""
+
+
diff --git a/configure/RELEASE b/configure/RELEASE
new file mode 100644
index 0000000..eb6981d
--- /dev/null
+++ b/configure/RELEASE
@@ -0,0 +1,5 @@
+EPICS_BASE=/testing/epics/base-3.15.5
+
+E3_REQUIRE_NAME:=require
+E3_REQUIRE_VERSION:=0.0.0
+
diff --git a/configure/RELEASE_DEV b/configure/RELEASE_DEV
new file mode 100644
index 0000000..eb6981d
--- /dev/null
+++ b/configure/RELEASE_DEV
@@ -0,0 +1,5 @@
+EPICS_BASE=/testing/epics/base-3.15.5
+
+E3_REQUIRE_NAME:=require
+E3_REQUIRE_VERSION:=0.0.0
+
diff --git a/configure/RULES b/configure/RULES
new file mode 100644
index 0000000..d3cd59f
--- /dev/null
+++ b/configure/RULES
@@ -0,0 +1,16 @@
+#CONFIG
+# include $(EPICS_BASE)/configure/RULES
+
+include $(TOP)/configure/E3/DEFINES_FT
+include $(TOP)/configure/E3/RULES_E3
+include $(TOP)/configure/E3/RULES_EPICS
+
+include $(TOP)/configure/E3/RULES_DB
+include $(TOP)/configure/E3/RULES_VARS
+
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/E3/RULES_DEV
+endif
+
+
diff --git a/e3-env b/e3-env
deleted file mode 160000
index d7bcf9d..0000000
--- a/e3-env
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d7bcf9d5907d2e590b21876358087a7dddcd0553
-- 
GitLab