
osReleaseHost := $(shell lsb_release --id --short | tr "[:upper:]" "[:lower:]")
osVersionHost := $(shell lsb_release --release --short | cut -d"." -f 1)

ifeq      ($(osReleaseHost)$(osVersionHost),rocky8)
   osVersion := AlmaLinux8
   update    := 1
else ifeq ($(osReleaseHost)$(osVersionHost),debian13)
   osVersion := Debian13
   update    := 1+deb13
else
   osVersion := unsupported
   update    := 0
   $(error $(osReleaseHost)$(osVersionHost) is not supported)
endif

condorVersion         := 25.0.10
condorTarball         := condor-$(condorVersion)-x86_64_$(osVersion)-stripped.tar.gz
condorUnpackDirectory := condor-$(condorVersion)-$(update)-x86_64_$(osVersion)-stripped

CONDOR_RELEASE := /usr/local/condor/condor-$(condorVersion)
ifeq ($(shell ls $(CONDOR_RELEASE)/bin/condor_q 2> /dev/null),)
   CONDOR_ROOT := $(CONDOR_RELEASE)
else
   CONDOR_ROOT := /tmp/Condor/$(condorVersion)
endif
DESIGNATION    := Grid
DESIGNATIONLC  := $(shell echo $(DESIGNATION) | tr A-Z a-z)
CONDOR_LOCAL   := /var/condor/$(DESIGNATION)_$(condorVersion)
COLLECTOR_PORT := 9518

poolPassword := $(shell uuidgen -r)
poolPassword := $(poolPassword)$(shell uuidgen -r)
poolPassword := $(poolPassword)$(shell uuidgen -r)
poolPassword := $(poolPassword)$(shell uuidgen -r)
poolPassword := $(shell echo -n $(poolPassword) | tr --delete "-")

userId := $(shell id --user)

checkUser:
	@if [ $(userId) -ne 0 ] ; then \
           echo "HTCondor installation requires root privilege" ; \
           /usr/bin/false ; \
        fi

clean: checkUser
	rm -rf $(condorUnpackDirectory)
	rm -f condor-$(condorVersion) condor_$(DESIGNATIONLC) condor_$(DESIGNATIONLC).service
	rm -rf /tmp/Condor/$(condorVersion)
	if [ -d /tmp/Condor ] ; then \
           find /tmp/Condor -empty -delete ; \
        fi

localclean: checkUser
	rm -rf $(CONDOR_LOCAL)
	rm -f /usr/local/environ.d/condor_$(DESIGNATIONLC)

binclean: checkUser
	rm -rf $(CONDOR_RELEASE)
	rm -f /usr/local/environ.d/condor-$(condorVersion)

unpack:
	tar xfz $(condorTarball)

condorInstall: checkUser
	$(condorUnpackDirectory)/condor_install --prefix=$(CONDOR_ROOT) \
                                                --local-dir=$(CONDOR_LOCAL) \
                                                --type=submit,manager
	@chmod o-w $(CONDOR_ROOT)
	@rm -rf $(condorUnpackDirectory)
	@mv $(CONDOR_ROOT)/etc $(CONDOR_LOCAL)
	@rm -f $(CONDOR_LOCAL)/etc/examples
	@rm -f $(CONDOR_LOCAL)/etc/condor/condor_ssh_to_job_sshd_config_template
	@install --owner root --group root --mode 0644 $(CONDOR_ROOT)/condor.sh $(CONDOR_LOCAL)/condor.sh
	@mkdir -p $(CONDOR_LOCAL)/config
	@find $(CONDOR_RELEASE) -xtype l -delete

condorConfig: checkUser
	@mv $(CONDOR_LOCAL)/condor_config.local $(CONDOR_LOCAL)/etc
	@echo LOCAL_CONFIG_DIR = \$$\(LOCAL_DIR\)/etc/condor/config.d         >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo                                                                 >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo SEC_TOKEN_DIRECTORY = $(CONDOR_LOCAL)/etc/condor/tokens.d       >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo SEC_PASSWORD_DIRECTORY = $(CONDOR_LOCAL)/etc/condor/passwords.d >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo                                                                 >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo "MASTER_NAME    = "hub2$(DESIGNATIONLC)                         >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo "SCHEDD_NAME    = "hub2$(DESIGNATIONLC)                         >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo "SCHEDD_HOST    = "hub2$(DESIGNATIONLC)@\$$\(CONDOR_HOST\)      >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo "COLLECTOR_NAME = "hub2$(DESIGNATIONLC)                         >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo "COLLECTOR_HOST = "\$$\(CONDOR_HOST\):$(COLLECTOR_PORT)         >> $(CONDOR_LOCAL)/etc/condor_config.local
	@echo                                                                 >> $(CONDOR_LOCAL)/etc/condor_config.local
	@sed -e "s:/condor_config.local:/etc/condor_config.local:" --in-place $(CONDOR_LOCAL)/etc/condor_config
	@sed -e "s:$(CONDOR_ROOT):$(CONDOR_RELEASE):"              --in-place $(CONDOR_LOCAL)/etc/condor_config

condorPassword: checkUser
	@mkdir -p $(CONDOR_LOCAL)/etc/condor/passwords.d
	@CONDOR_CONFIG=$(CONDOR_LOCAL)/etc/condor_config \
           $(CONDOR_RELEASE)/sbin/condor_store_cred add -c -p $(poolPassword) -f $(CONDOR_LOCAL)/etc/condor/passwords.d/POOL ; \
           chown root:root $(CONDOR_LOCAL)/etc/condor/passwords.d/POOL

defaultConf: checkUser
	@for confFile in 00-security 01-kernel-tuning 83-mount-under ; do \
           install --owner root --group root --mode 0644 $${confFile}.conf \
                                                         $(CONDOR_LOCAL)/etc/condor/config.d/$${confFile}.conf ; \
        done

customConf: checkUser
	@if [ -n "$$(/bin/ls *$(DESIGNATIONLC)-*.conf 2> /dev/null)" ] ; then \
           for confFile in "*$(DESIGNATIONLC)-*.conf" ; do \
              install --owner root --group root --mode 0644 $${confFile} \
                                                            $(CONDOR_LOCAL)/etc/condor/config.d/$${confFile} ; \
           done \
        fi

customToken: checkUser
	@if [ ! -d $(CONDOR_LOCAL)/etc/condor/tokens.d ] ; then \
           mkdir $(CONDOR_LOCAL)/etc/condor/tokens.d ; \
        fi
	@if [ -n "$$(/bin/ls $(DESIGNATIONLC)*.token 2> /dev/null)" ] ; then \
           for tokenFile in "$(DESIGNATIONLC)*.token" ; do \
              install --owner root --group root --mode 0600 $${tokenFile} \
                                                            $(CONDOR_LOCAL)/etc/condor/tokens.d/$${tokenFile} ; \
           done \
        fi

systemd:
	@lockDir=$$(grep "LOCK =" $(CONDOR_LOCAL)/etc/condor_config | sed -e "s/.* //") ; \
           sed -e "s:@CONDOR_LOCAL@:$(CONDOR_LOCAL):" \
               -e "s:@CONDOR_RELEASE@:$(CONDOR_RELEASE):" \
               -e "s:@CONDOR_LOCK@:$${lockDir}:" condor.service.in > condor_$(DESIGNATIONLC).service ; \
               mkdir --mode 0755 $${lockDir} ; \
               chown condor $${lockDir}

define condor_bin_use
\nconflict CONDOR_CHOICE\n\ndesc "HTCondor creates a High-Throughput Computing (HTC) environment."\n\nhelp "https://htcondor.org"\n\nsetenv  CONDOR_VERSION $(condorVersion)\n\nprepend PATH $(CONDOR_RELEASE)/bin\n\ntags DEVEL\n\n
endef
export condor_bin_use

define condor_local_use
\nconflict CONDORLOCAL_CHOICE\n\ndesc "HTCondor local instance."\n\nhelp "https://htcondor.org"\n\nuse -e -r condor-$(condorVersion)\n\nsetenv CONDOR_CONFIG $(CONDOR_LOCAL)/etc/condor_config\n\ntags DEVEL\n\n
endef
export condor_local_use

uselets:
	echo -n -e $${condor_bin_use}   > condor-$(condorVersion)
	echo -n -e $${condor_local_use} > condor_$(DESIGNATIONLC)

install: checkUser unpack condorInstall condorConfig defaultConf customConf customToken systemd uselets

