diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..72fb66494d8c28413ee0d6be781de7947dbf9668 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +*.local +*~ +\#* diff --git a/.gitmodules b/.gitmodules index f85d767cf64f46f875f9314dc9a568b9aa424fa9..0bc36163eee18c035bd2f0d4b55dc829eb1ffe1e 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 "devlib2"] path = devlib2 url = https://github.com/epics-modules/devlib2 diff --git a/Makefile b/Makefile index 508a9ffb70b9cf8929ccd018c1e6741d6c8126b0..12b8c8fe6bdbe45d5a50feeae7faebbdb9a08edf 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 @@ -14,163 +15,16 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see https://www.gnu.org/licenses/gpl-2.0.txt # +# # Author : Jeong Han Lee -# email : han.lee@esss.se -# Date : Thursday, November 30 21:38:27 CET 2017 -# version : 0.2.1 -# +# email : jeonghan.lee@gmail.com +# Date : 2018Feb12-1455-29CET +# 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" - - -# # 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: - $(QUIET)echo "EPICS_BASE=$(COMMUNITY_EPICS_BASE)" > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/RELEASE.local - $(QUIET)echo "INSTALL_LOCATION=$(M_DEVLIB2)" > $(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" - +include $(TOP)/configure/RULES -.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 diff --git a/configure/CONFIG b/configure/CONFIG index 17ba8e54449844f2153100dfe8e117d2a03a6429..6e516fd47a910bee85d857d9587ea8fd1f1efabc 100644 --- a/configure/CONFIG +++ b/configure/CONFIG @@ -1,60 +1,38 @@ -# (EPICS) EPICS_MODULE_NAME -# The EPICS community MODULE name. -# For example, https://github.com/epics-module/devlib2 -# devlib2 is EPICS_MODULE_NAME -# -EPICS_MODULE_NAME:=devlib2 - - -# (EPICS) EPICS_MODULE_TAG -# The EPICS community tag number, which we would like to install -# within ESS EPICS Environment (ESS) -# export EPICS_MODULE_TAG:=tags/2.5.1 -export EPICS_MODULE_TAG:=tags/2.9 - - -# (LOCAL) EPICS_MODULE_PATH -# Usually, it is the directory in $(TOP), after cloning the repository -# However, some modules from ESS have the weird directory structure. -# If one use the cloned directory, one should define the proper source -# directory path in $(ESS_MODULE_MAKEFILE) -export EPICS_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME) - - -# (LOCAL) ESS_MODULE_MAKEFILE -# The very strange and additional Makefile for EPICS_MODULE_NAME, which -# should be maintained according to main repository evolving. -# some export variables in CONFIG file -# in order to build and install for EEE -ESS_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile - - -# (E3) PROJECT -# it is the jargon of E3, from EEE and PSI EPICS Environment, -# the E3 generic makefile (driver.makefile) uses it as the installation -# directory, and it will be used in the iocsh script (aka iocsh.bash) -# with the require commands, for example -# require $(PROJECT) $(LIBVERSION) -export PROJECT:=$(EPICS_MODULE_NAME) - - -# (E3) LIBVERSION -# it is the jargon of E3, from EEE and PSI EPICS Environment, -# the E3 generic makefile (driver.makefile) uses it as the installation -# directory, and it will be used in the iocsh script (aka iocsh.bash) -# with the require commands, for example -# require $(PROJECT) $(LIBVERSION) -export LIBVERSION:=2.9.0 - - -# It may be the sole reason why we have so many troubles related with -# module version mismatch within the current E3 -# -# export USR_DEPENDENCIES += devlib2,2.9.0 - - -# E3_ENV_NAME -# It is the global E3 environment repository -# -export E3_ENV_NAME:=e3-env -#export E3_ENV_TAG:=v0.1 +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 + +# The definitions shown below can also be placed in an untracked RELEASE.local +-include $(TOP)/../RELEASE.local +-include $(TOP)/configure/RELEASE.local +-include $(TOP)/../CONFIG_MODULE.local +-include $(TOP)/configure/CONFIG_MODULE.local + + +## Asyn, ADSupport may needs to define other variables + +-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 0000000000000000000000000000000000000000..baef8ea08ebf3d65b77f04eca7bceb3833611a39 --- /dev/null +++ b/configure/CONFIG_MODULE @@ -0,0 +1,20 @@ +# +EPICS_MODULE_NAME:=devlib2 +EPICS_MODULE_TAG:=tags/2.9 +# +E3_MODULE_VERSION:=2.9.0 + + +# ONLY IF this module has the sequencer dependency. However, +# in most case, we don't need to enable the following line, +# the default - latest version will be used +#E3_SEQUENCER_NAME:=sequencer +#E3_SEQUENCER_VERSION:=2.1.21 +# +# 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 0000000000000000000000000000000000000000..563423b133042dcfe2577d9756f57688dddf5233 --- /dev/null +++ b/configure/CONFIG_MODULE_DEV @@ -0,0 +1,21 @@ +# +EPICS_MODULE_NAME:=devlib2 +EPICS_MODULE_TAG:=master +# +E3_MODULE_VERSION:=develop + +# ONLY IF this module has the sequencer dependency. However, +# in most case, we don't need to enable the following line, +# the default - latest version will be used +#E3_SEQUENCER_NAME:=sequencer +#E3_SEQUENCER_VERSION:=2.1.21 +# +# 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/devlib2" + diff --git a/configure/E3/CONFIG_E3_MAKEFILE b/configure/E3/CONFIG_E3_MAKEFILE new file mode 100644 index 0000000000000000000000000000000000000000..b3a1c37097c2216d4d29eebe057369394a918fb1 --- /dev/null +++ b/configure/E3/CONFIG_E3_MAKEFILE @@ -0,0 +1,21 @@ +# 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_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITEMODS_PATH="$(E3_SITEMODS_PATH)" +E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITEAPPS_PATH="$(E3_SITEAPPS_PATH)" +E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITELIBS_PATH="$(E3_SITELIBS_PATH)" +E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SEQUENCER_NAME="$(E3_SEQUENCER_NAME)" +E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SEQUENCER_VERSION="$(E3_SEQUENCER_VERSION)" + +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 0000000000000000000000000000000000000000..d188961c6e6c0b986f08c9ab3268b4ee6fbcc6e0 --- /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 0000000000000000000000000000000000000000..61ef087135976941aa1f5fcf9e4829fbfb418612 --- /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)/sequencer +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 0000000000000000000000000000000000000000..e538bc17c4d15da2ad916f2756c17e037d6d81cd --- /dev/null +++ b/configure/E3/CONFIG_EXPORT @@ -0,0 +1,14 @@ +# 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 +#export E3_SITEMODS_PATH +#export E3_SITEAPPS_PATH +#export E3_SITELIBS_PATH +#export E3_SEQUENCER_NAME +#export E3_SEQUENCER_VERSION + diff --git a/configure/E3/CONFIG_REQUIRE b/configure/E3/CONFIG_REQUIRE new file mode 100644 index 0000000000000000000000000000000000000000..46265159274c03bba3f104250571bc6b85e1a72b --- /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 0000000000000000000000000000000000000000..f4d2cb7c8d6efa98f6fb14cfd9a41c8ec082a1fb --- /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 0000000000000000000000000000000000000000..5c0ccbb48c6931b04a1b5e183b0b9fd6c90b32cd --- /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 0000000000000000000000000000000000000000..6251c25bef3db900b706d652309cd0482fc7c434 --- /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 0000000000000000000000000000000000000000..41f21d4085f424810785e7d532180434aab45de5 --- /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 0000000000000000000000000000000000000000..44553059797cf44432f8ee3bb489525a9683706b --- /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 0000000000000000000000000000000000000000..e5ae6b2b99ed5f18e8d74749fbcc0dcfda624b5f --- /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.local + $(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 0000000000000000000000000000000000000000..e388285c46495327e98e39e6ffce55555bbb37c7 --- /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 0000000000000000000000000000000000000000..eb6981d03f6f089ccd9139a4209a935ba48d84a3 --- /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 0000000000000000000000000000000000000000..eb6981d03f6f089ccd9139a4209a935ba48d84a3 --- /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 0000000000000000000000000000000000000000..d3cd59ffbbe66580dd4a9df2fee02a9087a985a9 --- /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/devlib2.Makefile b/devlib2.Makefile index 61a4c73af3baf52c6c97c5a9adcc499d37faf3cb..3f3cc3a2a2f1bbdc3e150201f13b0a2354c70a5c 100644 --- a/devlib2.Makefile +++ b/devlib2.Makefile @@ -1,5 +1,5 @@ -include ${REQUIRE_TOOLS}/driver.makefile +include ${E3_REQUIRE_TOOLS}/driver.makefile COMMON:= common @@ -49,3 +49,7 @@ SOURCES += $(VMEAPP)/devlib_compat.c DBDS += $(VMEAPP)/epicsvme.dbd + +# db rule is the default in RULES_E3, so add the empty one + +db: diff --git a/e3-env b/e3-env deleted file mode 160000 index 4eed6fe3babcad62b88c5efe105c5b047845c171..0000000000000000000000000000000000000000 --- a/e3-env +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4eed6fe3babcad62b88c5efe105c5b047845c171