Makefile: RT-Druid CLI with EE svn

From ErikaWiki

(Difference between revisions)
Jump to: navigation, search
(Created page with "This makefile has these main targets: * checkout or update Erika Enterprise from svn * download the last release of RT-Druid CLI package * use RT-Druid to configure the system * ...")
Line 300: Line 300:
.PHONY: all
.PHONY: all
all: build_clean build</nowiki>
all: build_clean build</nowiki>
 +
 +
 +
 +
[[Category:RT-Druid]]

Revision as of 11:33, 2 April 2012

This makefile has these main targets:

  • checkout or update Erika Enterprise from svn
  • download the last release of RT-Druid CLI package
  • use RT-Druid to configure the system
  • build the system using Erika Enterprise files
#############################################################
#
# CONVERT_PATH macro is used to get an absolute path that can
#              be used by host programs, like JAVA 
#
#############################################################

ifeq ($(strip $(HOST_OS)),)
HOST_OS :=$(shell uname -a)
endif

# CYGWIN Specific
ifeq ($(findstring CYGWIN, ${HOST_OS}), CYGWIN)
# CYGWIN
CONVERT_PATH_TO_OS = $(shell cygpath -m $(1))
CONVERT_PATH_TO_MK = $(shell cygpath $(1))
else
# DEFAULT (unix like)
CONVERT_PATH_TO_OS = $(1)
CONVERT_PATH_TO_MK = $(1)
endif 


#############################################################
#
# Tools paths. By defaylt all paths are related to TOOLS_BASE
#
#############################################################
TOOLS_BASE   ?= tools
RTDRUID_HOME ?= $(TOOLS_BASE)/RT-Druid

# EE_TEMP should be absolute
ifdef EE_TEMP
EE_TEMP      := $(abspath EE_TEMP)
else
EE_TEMP      := $(abspath $(TOOLS_BASE)/temp)
endif

# ERIKA_FILES should be an absolute path in the OS format, while EEBASE is in the 
# Makefile form and should be used only inside the makefile
ifdef EEBASE
$(warning EEBASE is already defined and will be override. Use ERIKA_FILES instead)
endif

ifndef ERIKA_FILES
ERIKA_FILES  := $(call CONVERT_PATH_TO_OS,$(TOOLS_BASE)/ee)
endif
EEBASE       := $(call CONVERT_PATH_TO_MK,$(ERIKA_FILES))
ERIKA_FILES  := $(call CONVERT_PATH_TO_OS, $(abspath $(EEBASE)))
# export ERIKA_FILES because it is used by RT-Druid
export ERIKA_FILES

# Output folder
BUILD_DIR ?= output

#############################################################
#
# HTTP URL of RT-Druid package.
#
#############################################################

# Example: tuxfamily standard path
RTDRUID_FILE_NAME ?=RT-Druid_1.6.1.zip
RTDRUID_WEB_SITE ?= http://software.evidence.eu.com/ee_161/CLI/$(RTDRUID_FILE_NAME)

# Example: custom path with password
#   RTDRUID_FILE_NAME ?=MY_RT-Druid_1.6.1.zip
#   RTDRUID_WEB_SITE ?= --user=MyUser --ask-password http://software.evidence.eu.com/special_edition/$(RTDRUID_FILE_NAME)
#   RTDRUID_WEB_SITE ?= --user=MyUser --password=123456 http://software.evidence.eu.com/special_edition/$(RTDRUID_FILE_NAME)

#############################################################
#
# RT-Druid input files
#
#############################################################

# The list of input files.
# Current version of makefile does not support paths and file names with whitespace
# By default the input file is just "conf.oil". If the user set INPUTS_PATH, INPUTS
# will contain all files with suffix .oil, .arxml and .ertd
ifndef INPUTS
INPUTS := conf.oil
ifdef INPUTS_PATH
	INPUTS := $(shell find $(INPUTS_PATH) -iname "*.oil" -or -iname "*.ertd")
endif
else
ifdef INPUTS_PATH
	$(error INPUTS_PATH can be specified only if INPUTS is empty or unset)
endif
endif

ifneq ($(notdir $(RTDRUID_HOME)),RT-Druid)
$(warning RT-Druid update target works better if RTDRUID_HOME ends with RT-Druid)
endif

#############################################################
#
# HELP
#
#############################################################
.PHONY: help
help:
	@echo -e "\n\
	This makefile tries to setup the environment needed  to build  a system  based on\n\
	RT-Druid and Erika Enterprise.  The environment is downloaded and updated through\n\
	the web, using\n\
	- svn for Erikae Enterprise sources and\n\
	- wget for RT-Druid packages (here it is used the smallest Command Line package).\n\
	\n\
	Please note that this makefile cannot handle paths and filenames with whitespaces\n\
	\n\
	Targets:\n\
	update_erika  - updates Erika Enterprise to the latest version in the svn.\n\
	update_rtduid - updates RT-Druid packages.\n\
	configure     - using RT-Druid, configure an Erika Enterprise system.\n\
	                Depends on RTDRUID_HOME and may call update_rtduid.\n\
	build         - build the configurated system\n\
	                Depends on ERIKA_FILES and may call update_erika.\n\
	build_clean   - clean the results of a build process, without touch the generated\n\
	                configuration.\n\
	all           - calls build_clean and build targets.\n\
	                Considering all dependecies, the result is:\n\
	                * tries to clean an existing build (all errors are ignored);\n\
	                * check if RT-Druid is available; if not, download a new one;\n\
	                * check if configuration folder exist and is newer than RT-Druid\n\
	                  folder; if not, runs RT-Druid to generate the new configuration\n\
	                * check if Erika Enterprise source folder exist; if not, download\n\
	                  a new one;\n\
	                * build the system\n\
	\n\
	Variables:\n\
	TOOLS_BASE   - path used to build  default values of  RT-Druid,  Erika Enterprise\n\
	               and temp folders.\n\
	               (current value = $(TOOLS_BASE) )\n\
	RTDRUID_HOME - path of RT-Druid package. It should end with RT-Druid.\n\
	               Default TOOL_BASE/RT-Druid\n\
	               (current value = $(RTDRUID_HOME) )\n\
	ERIKA_FILES  - path of Erika Enterprise sources.  This path has to be in the host\n\
	               format,  i.e. all absolute path are like C:\\ee under windows, and\n\
	               like  /opt/ee otherwise  (usually relative paths  are the  same in\n\
	               both windows and linux).\n\
	               Default TOOL_BASE/ee (converted to host path if needed)\n\
	               (current value = $(ERIKA_FILES) )\n\
	EE_TEMP      - path of a folder  used to save bakups  and temporary files used to\n\
	               correctly do RT-Druid updates. Default TOOL_BASE/temp\n\
	               (current value = $(EE_TEMP) )\n\
	BUILD_DIR    - the path where  RT-Druid will place the folder with  all generated\n\
	               configuration files.\n\
	               (current value = $(BUILD_DIR) )\n\
	INPUTS       - list of files  (spaced by a whitespace) used by  RT-Druid as input\n\
	               for configuration generation process.\n\
	               Default conf.oil\n\
	               (current value = $(INPUTS) )\n\
	INPUTS_PATH  - identifies one or more folders (spaced by a whitespace) where look\n\
	               for RT-Druid input files. This variable cannnot be used if INPUTS\n\
	               is set.\n\
	               (current value = $(INPUTS_PATH) )\n\
	\n\
	Examples:\n\
	   make all\n\
	   TOOLS_BASE=/opt/evidence make all\n\
	   TOOLS_BASE=/opt/evidence INPUTS_PATH=conf make build\n\
	   INPUTS=\`ls --format=horizontal conf/*\` make build\n\
	   INPUTS=\`find conf -type f -printf \"%p \"\` make build"

#############################################################
#
# Update Erika Enterprise
#
#############################################################
.PHONY: update_erika
update_erika $(EEBASE):
	@mkdir -p $(EE_TEMP) ; \
	if [ -d "$(EEBASE)" ]; \
		then ( \
			echo -e "\
		=================================\n\
		    Update Erika Enterprise\n\
		=================================" ;\
			rm -f $(EE_TEMP)/ee_checkout.log ;\
			cd $(EEBASE); svn update \
		) else (\
			echo -e "\
		=================================\n\
		    Checkout Erika Enterprise\n\
		=================================" ;\
			rm -f $(EE_TEMP)/ee_checkout.log ;\
			svn checkout svn://svn.tuxfamily.org/svnroot/erika/erikae/repos/ee/trunk/ee $(EEBASE) \
		) \
	fi 

#############################################################
#
# Update RT-Druid
#
#############################################################
.PHONY: update_rtdruid
update_rtdruid: download_rtdruid $(RTDRUID_HOME)

download_rtdruid $(EE_TEMP)/$(RTDRUID_FILE_NAME): 
	@echo -e "\
		=================================\n\
		          Update RT-Druid\n\
		================================="
	@mkdir -p $(EE_TEMP) ; \
	cd $(EE_TEMP) ; wget -N $(RTDRUID_WEB_SITE)

$(RTDRUID_HOME): $(EE_TEMP)/$(RTDRUID_FILE_NAME)
	@if [ -d "$(RTDRUID_HOME)" ]; then (\
		cp "$(RTDRUID_HOME)/configuration/common_oil.pref" $(EE_TEMP) 2>/dev/null ;\
		rm -rf "$(EE_TEMP)/RT-Druid_backup"; \
		mv "$(RTDRUID_HOME)" "$(EE_TEMP)/RT-Druid_backup" && \
		rm -rf $(RTDRUID_HOME) \
	) fi && \
	unzip $(EE_TEMP)/$(RTDRUID_FILE_NAME) -d $(TOOLS_BASE) && \
	(cp "$(EE_TEMP)/common_oil.pref" "$(RTDRUID_HOME)/configuration/"  2>/dev/null || exit 0); \
	if [ -d "$(RTDRUID_HOME)" ]; then (\
		touch $(RTDRUID_HOME) \
	) else ( \
		echo "RT-Druid HOME does not exist. Check zip file and RTDRUID_HOME"; exit 1 \
	) fi


#############################################################
#
# Use RT-Druid to configure Erika Enterprise
#
#############################################################
.PHONY: configure
configure $(BUILD_DIR): $(RTDRUID_HOME) $(INPUTS)
	@echo -e "\
		=================================\n\
		          Configure\n\
		================================="
	@bash $(RTDRUID_HOME)/evidence/generate_code.sh \
			$(RTDRUID_HOME) \
			$(call CONVERT_PATH_TO_OS, $(INPUTS)) \
			$(call CONVERT_PATH_TO_OS, $(BUILD_DIR)) && \
	(if [ -d "$(BUILD_DIR)" ]; then \
			touch $(BUILD_DIR) ; \
		else \
			echo "System configured but $(BUILD_DIR) does not exist" ; exit 1 ; \
	fi)

#############################################################
#
# Compile the system
#
#############################################################
.PHONY: build
build: $(BUILD_DIR) $(EEBASE)
	@echo -e "\
		=================================\n\
		          Build\n\
		================================="
	cd $(BUILD_DIR) ; \
	make

#############################################################
#
# Clean compile results
#
#############################################################
.PHONY: build_clean
build_clean: $(EEBASE)
	@echo -e "\
		=================================\n\
		          Build Clean\n\
		================================="
	@rm -f $(BUILD_DIR)/build.log
	@if [ -d "$(BUILD_DIR)" ]; then cd $(BUILD_DIR) && make clean ; fi

#############################################################
#
# Clean Erika Enterprise configuration files generated by
# RT-Druid
#
#############################################################
.PHONY: conf_clean
conf_clean:
	@echo -e "\
		=================================\n\
		      Configuration clean\n\
		================================="
	@rm -rf $(BUILD_DIR)


#############################################################
#
# Clean prervious compile results and do a new build
#
#############################################################
.PHONY: all
all: build_clean build
Personal tools