#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=-lto
export DEB_CFLAGS_MAINT_APPEND = -Wno-error=format-security
export DEB_CXXFLAGS_MAINT_APPEND = -Wno-error=format-security

PKG := gnu15-compilers-ohpc
UPSTREAM_VERSION := $(shell dpkg-parsechangelog -S Version | sed 's/-.*//')
INSTALL_PREFIX := /opt/ohpc/pub/compiler/gcc/$(UPSTREAM_VERSION)
MODULE_DIR := /opt/ohpc/pub/modulefiles/gnu15
MODULE_VERSION := $(UPSTREAM_VERSION)
DOC_ROOT := /opt/ohpc/pub/doc/contrib
MODULEDEPS_DIR := /opt/ohpc/pub/moduledeps/gnu15
BUILD_BASE := $(CURDIR)/build
GCC_SRC_DIR := $(BUILD_BASE)/gcc-$(UPSTREAM_VERSION)
OBJ_DIR := $(GCC_SRC_DIR)/obj
SOURCES_DIR := $(CURDIR)/SOURCES

%:
	dh $@ --without autoreconf

override_dh_auto_configure:
	rm -rf $(BUILD_BASE)
	mkdir -p $(BUILD_BASE)
	cd $(BUILD_BASE) && tar -xf $(SOURCES_DIR)/gcc-$(UPSTREAM_VERSION).tar.xz
	cd $(GCC_SRC_DIR) && tar -xf $(SOURCES_DIR)/gmp-6.3.0.tar.bz2
	cd $(GCC_SRC_DIR) && tar -xf $(SOURCES_DIR)/mpc-1.3.1.tar.gz
	cd $(GCC_SRC_DIR) && tar -xf $(SOURCES_DIR)/mpfr-4.2.2.tar.gz
	cd $(GCC_SRC_DIR) && ln -sf gmp-6.3.0 gmp
	cd $(GCC_SRC_DIR) && ln -sf mpc-1.3.1 mpc
	cd $(GCC_SRC_DIR) && ln -sf mpfr-4.2.2 mpfr
	mkdir -p $(OBJ_DIR)
	cd $(OBJ_DIR) && ../configure \
		--disable-multilib \
		--enable-languages="c,c++,fortran" \
		--prefix=$(INSTALL_PREFIX) \
		--disable-static \
		--enable-shared

override_dh_auto_build:
	$(MAKE) -C $(OBJ_DIR)

override_dh_auto_install:
	$(MAKE) -C $(OBJ_DIR) DESTDIR=$(CURDIR)/debian/$(PKG) install
	rm -f $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/share/info/dir
	ln -sf gcc $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/cc
	ln -sf gfortran $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/f95
	printf '%s\n' \
		'#!/bin/sh' \
		'fl="-std=c89"' \
		'for opt; do' \
		'  case "$$opt" in' \
		'    -ansi|-std=c89|-std=iso9899:1990) fl="";;' \
		'    -std=*) echo "`basename $$0` called with non ANSI/ISO C option $$opt" >&2' \
		'            exit 1;;' \
		'  esac' \
		'done' \
		'exec gcc $$fl "$$@"' \
		> $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/c89
	printf '%s\n' \
		'#!/bin/sh' \
		'fl="-std=c99"' \
		'for opt; do' \
		'  case "$$opt" in' \
		'    -std=c99|-std=iso9899:1999) fl="";;' \
		'    -std=*) echo "`basename $$0` called with non ISO C99 option $$opt" >&2' \
		'            exit 1;;' \
		'  esac' \
		'done' \
		'exec gcc $$fl "$$@"' \
		> $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/c99
	chmod 0755 $(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/c89 \
		$(CURDIR)/debian/$(PKG)$(INSTALL_PREFIX)/bin/c99
	install -d $(CURDIR)/debian/$(PKG)$(MODULE_DIR)
	printf '%s\n' \
		'help([[' \
		'This module loads the GNU compiler collection"' \
		'' \
		'See the man pages for gcc, g++, and gfortran for detailed information' \
		'on available compiler options and command-line syntax.' \
		'' \
		'Version $(MODULE_VERSION)' \
		']])' \
		'' \
		'whatis("Name: GNU Compiler Collection")' \
		'whatis("Version: $(MODULE_VERSION)")' \
		'whatis("Category: compiler, runtime support")' \
		'whatis("Description: GNU Compiler Family (C/C++/Fortran for x86_64)")' \
		'whatis("URL: http://gcc.gnu.org/")' \
		'' \
		'local version = "$(MODULE_VERSION)"' \
		'' \
		'prepend_path("PATH",            "$(INSTALL_PREFIX)/bin")' \
		'prepend_path("MANPATH",         "$(INSTALL_PREFIX)/share/man")' \
		'prepend_path("INCLUDE",         "$(INSTALL_PREFIX)/include")' \
		'prepend_path("LD_LIBRARY_PATH", "$(INSTALL_PREFIX)/lib64")' \
		'prepend_path("MODULEPATH",      "$(MODULEDEPS_DIR)")' \
		'' \
		'family("compiler")' \
		> $(CURDIR)/debian/$(PKG)$(MODULE_DIR)/$(MODULE_VERSION).lua
	install -d $(CURDIR)/debian/$(PKG)$(DOC_ROOT)/$(PKG)-$(UPSTREAM_VERSION)
	for doc in README ChangeLog ChangeLog.tree-ssa COPYING COPYING3 COPYING.LIB COPYING3.LIB COPYING.RUNTIME; do \
		if [ -f $(GCC_SRC_DIR)/$$doc ]; then \
			install -m 0644 $(GCC_SRC_DIR)/$$doc $(CURDIR)/debian/$(PKG)$(DOC_ROOT)/$(PKG)-$(UPSTREAM_VERSION)/$$doc; \
		fi; \
	done

override_dh_auto_test:
	@echo "Skipping upstream test suite."

override_dh_auto_clean:
	rm -rf $(BUILD_BASE)
