#!/usr/bin/make -f

export SHELL = /bin/bash

export DH_VERBOSE=1

include debian/defs.mk

changelog_values := $(shell dpkg-parsechangelog \
                        | awk '/^(Version|Source|Distribution):/ {print $$2}')
PKGSOURCE := $(word 1, $(changelog_values))
PKGVERSION := $(word 2, $(changelog_values))
PKGDISTRO := $(word 3, $(changelog_values))
PKGFLAVOR := $(shell echo $(PKGSOURCE) | perl -nle 's/mysql-(.*?)-\d+.*/$$1/ && print ')

ifeq ("x$(MYSQL_FLAVOR)","x")
  export MYSQL_FLAVOR=$(PKGFLAVOR)
endif

ifneq ("x$(MYSQL_FLAVOR)","x")
  MYSQL_BRANDED_BASE_VERSION:=$(MYSQL_FLAVOR)-$(MYSQL_BASE_VERSION)
  MYSQL_BRANDED_PREVIOUS_BASE_VERSION:=$(MYSQL_FLAVOR)-$(MYSQL_PREVIOUS_BASE_VERSION)
else
  ifeq ( "$(MYSQL_BRANDED_BASE_VERSION)","@MYSQL_BRANDED_BASE_VERSION@" )
    MYSQL_BRANDED_BASE_VERSION:=$(MYSQL_BASE_VERSION)
    MYSQL_BRANDED_PREVIOUS_BASE_VERSION:=$(MYSQL_PREVIOUS_BASE_VERSION)
  else
    MYSQL_BRANDED_BASE_VERSION:=$(MYSQL_BRANDED_BASE_VERSION)
    MYSQL_BRANDED_PREVIOUS_BASE_VERSION:=$(MYSQL_BRANDED_PREVIOUS_BASE_VERSION)
  endif 
endif

PACKAGE=mysql-$(MYSQL_BRANDED_BASE_VERSION)

PWD=$(shell pwd)
TMP=$(PWD)/debian/tmp/


ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)

DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)

MAKE_J = $(shell if grep -q processor.*3 /proc/cpuinfo; then echo "-j 4"; else echo ""; fi )

ifeq ($(findstring $(ARCH),i386 sparc),$(ARCH))
    USE_ASSEMBLER=--enable-assembler 
endif

ifeq ($(findstring $(ARCH), arm),$(ARCH))
    FOMIT_FRAME_POINTER=
else
    FOMIT_FRAME_POINTER=-fomit-frame-pointer
endif

# trying to raise stability on i386. See #116631
# don't use it on ia64
ifeq ($(findstring $(ARCH),i386),$(ARCH))
  FNO_EXCEPTIONS=-fno-exceptions
endif

# This causes seg11 crashes if LDAP is used for groups in /etc/nsswitch.conf
# so it is disabled by default although, according to MySQL, it brings >10%
# performance gain if enabled. See #299382.
ifeq ($(STATIC_MYSQLD), 1)
    USE_STATIC_MYSQLD=--with-mysqld-ldflags=-all-static
endif

ifneq ("$(MYSQL_BUILD_TEST)","yes")
    MYSQL_BUILD_TEST=no
endif

control-file:
	@echo "## This file is autogenerated you want to edit control.in instead" > debian/control.tmp
	sed -e "s/@MYSQL_BASE_VERSION@/$(MYSQL_BASE_VERSION)/g" \
	    -e "s/@MYSQL_BRANDED_BASE_VERSION@/$(MYSQL_BRANDED_BASE_VERSION)/g" \
	    -e "s/@VERSIONSTRING@/$(VERSIONSTRING)/g" \
	    -e "s/@MYSQL_PREVIOUS_BASE_VERSION@/$(MYSQL_PREVIOUS_BASE_VERSION)/g" \
	    -e "s/@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@/$(MYSQL_BRANDED_PREVIOUS_BASE_VERSION)/g" \
	    -e "s/@MYSQL_SOURCE_BASE_VERSION@/$(MYSQL_SOURCE_BASE_VERSION)/g" \
	    -e "s/@SHARED_LIB_MAJOR_VERSION@/$(SHARED_LIB_MAJOR_VERSION)/g" \
	    -e "s/@NDB_SHARED_LIB_MAJOR_VERSION@/$(NDB_SHARED_LIB_MAJOR_VERSION)/g" \
		debian/control.in >> debian/control.tmp
	[ -e debian/control ] \
	  && cmp -s debian/control debian/control.tmp \
	  && rm -f debian/control.tmp && exit 0; \
	  mv debian/control.tmp debian/control


missing:
	./BUILD/autorun.sh 

configure: configure-stamp
configure-stamp:
	@echo "RULES.configure-stamp"
	dh_testdir

ifneq ($(ARCH_OS),hurd)
	@if [ ! -d /proc/self ]; then echo "/proc IS NEEDED" 1>&2; exit 1; fi 
endif

	@cp debian/control debian/control.sav
	( \
	CC="$(MYSQL_BUILD_CC)"  \
	CXX="$(MYSQL_BUILD_CXX)" \
	BUILD_OPTS="${MYSQL_BUILD_OPTS:-''}"  \
	CFLAGS="${MYSQL_BUILD_CFLAGS:-'-DBIG_JOINS=1 -O2'}" \
	CXXFLAGS="${MYSQL_BUILD_CXXFLAGS:-'-DBIG_JOINS=1 -felide-constructors -fno-rtti -O2'}" \
	./configure \
		--build=${DEB_BUILD_GNU_TYPE} \
		--host=${DEB_HOST_GNU_TYPE} \
		\
		--prefix=/usr \
	        --exec-prefix=/usr \
	        --libexecdir=/usr/sbin \
	        --datadir=/usr/share \
	        --localstatedir=/var/lib/mysql \
	        --includedir=/usr/include \
	        --infodir=/usr/share/info \
	        --mandir=/usr/share/man \
		\
		--with-comment="MySQL Server (custom build)" \
		--with-server-suffix="-custom" \
		\
		--enable-shared \
		--enable-thread-safe-client \
	        $(USE_ASSEMBLER) \
		--enable-local-infile \
		\
                --with-big-tables \
		--with-unix-socket-path=/var/run/mysqld/mysqld.sock \
	       	--with-mysqld-user=mysql \
		$(USE_STATIC_MYSQLD) \
		--without-bench \
		--with-zlib-dir=bundled \
		--with-yassl \
		--with-readline \
		--with-extra-charsets=all \
		--with-innodb \
                --with-blackhole-storage-engine \
                --with-example-storage-engine \
		\
		--with-isam \
		--with-archive-storage-engine \
		--with-csv-storage-engine \
		--with-federated-storage-engine \
		--without-embedded-server \
		--with-ndbcluster \
		--with-ndb-shm \
		--without-ndb-sci \
		--without-ndb-test \
		--with-ndb-docs \
		$(MYSQL_BUILD_OPTS) \
	)

	@mv debian/control.sav debian/control

	touch configure-stamp


build: build-stamp
build-stamp: configure
	dh_testdir

	$(MAKE) $(MAKE_J)

	if [ -f sql/.libs/mysqld ] ; then \
		nm --numeric-sort sql/.libs/mysqld > sql/mysqld.sym ; \
	else \
		nm --numeric-sort sql/mysqld > sql/mysqld.sym ; \
	fi


	if [ "${MYSQL_BUILD_TEST}" != "no" ] ; then \
	  ( cd mysql-test ;\
	    MTR_BUILD_THREAD=auto ; \
	    export MTR_BUILD_THREAD ; \
            perl ./mysql-test-run.pl --force --report-features ; \
            perl ./mysql-test-run.pl --force --ps-protocol ; \
            true ) \
	fi


	touch build-stamp

stamp-control:
	# We have to prepare the various control files

	echo "in stamp-control - BASE_VER==$(MYSQL_BASE_VERSION)"
	# We have some naming inconsistencies here... 
	for f in debian/*.in debian/po/POTFILES.in.in ; do \
            f2=`echo $$f | sed "s,BASE,$(MYSQL_BRANDED_BASE_VERSION),g;\
                                s,PREV,$(MYSQL_BRANDED_PREVIOUS_BASE_VERSION),g;\
                                s,NLIB,$(NDB_SHARED_LIB_MAJOR_VERSION),g;\
                                s,SLIB,$(SHARED_LIB_MAJOR_VERSION),g;s,\.in$$,,"`; \
            if [ $$f2 != debian/control -a $$f2 != debian/Makefile ]; then \
                sed -e "s/@MYSQL_BASE_VERSION@/$(MYSQL_BASE_VERSION)/g" \
	    	    -e "s/@MYSQL_BRANDED_BASE_VERSION@/$(MYSQL_BRANDED_BASE_VERSION)/g" \
		    -e "s/@VERSIONSTRING@/$(VERSIONSTRING)/g" \
                    -e "s/@PRIORITY@/$(PRIORITY)/g" \
		    -e "s/@MYSQL_PREVIOUS_BASE_VERSION@/$(MYSQL_PREVIOUS_BASE_VERSION)/g" \
	    	    -e "s/@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@/$(MYSQL_BRANDED_PREVIOUS_BASE_VERSION)/g" \
		    -e "s/@MYSQL_SOURCE_BASE_VERSION@/$(MYSQL_SOURCE_BASE_VERSION)/g" \
		    -e "s/@SHARED_LIB_MAJOR_VERSION@/$(SHARED_LIB_MAJOR_VERSION)/g" \
		    -e "s/@NDB_SHARED_LIB_MAJOR_VERSION@/$(NDB_SHARED_LIB_MAJOR_VERSION)/g" \
                    -e "s,@SCRIPTDIR@,/$(scriptdir),g" \
                    -e "s,@INFO@,$(findstring info, $(doc_dependencies)),g" \
                  <$$f >$$f2; \
            fi; \
        done
	echo "MYSQL_BUILD_OPTS=$(MYSQL_BUILD_OPTS)" >> debian/defs.mk
	echo "MYSQL_BUILD_CXXFLAGS=$(MYSQL_BUILD_CXXFLAGS)" >> debian/defs.mk
	echo "MYSQL_BUILD_CFLAGS=$(MYSQL_BUILD_CFLAGS)" >> debian/defs.mk
	echo "MYSQL_BUILD_CC=$(MYSQL_BUILD_CC)" >> debian/defs.mk
	echo "MYSQL_BUILD_CXX=$(MYSQL_BUILD_CXX)" >> debian/defs.mk


# depending on two files we expect to be in the root
# to protect from accidentally deleting a whole bunch of 
# files somewhere else.
clean: configure.in Makefile.am control-file

	rm -f debian/mysql-server-$(MYSQL_BRANDED_BASE_VERSION).mysql.init

	# We depend on this later, and delete the results in the mean time
	$(MAKE) -f debian/rules stamp-control
	dh_testdir 
	dh_testroot
	rm -f configure-stamp
	rm -f build-stamp

	cp debian/defs.mk debian/defs.mk.sav
	cp debian/control debian/control.sav
	-make distclean
	mv debian/defs.mk.sav debian/defs.mk
	mv debian/control.sav debian/control

	debconf-updatepo

	for f in debian/*.in; do \
            f2=`echo $$f | sed "s,BASE,$(MYSQL_BRANDED_BASE_VERSION),g;\
                                s,PREV,$(MYSQL_BRANDED_PREVIOUS_BASE_VERSION),g;\
                                s,NLIB,$(NDB_SHARED_LIB_MAJOR_VERSION),g;\
                                s,SLIB,$(SHARED_LIB_MAJOR_VERSION),g;s,\.in$$,,"`; \
            if [ $$f2 != debian/control -a $$f2 != debian/Makefile -a $$f2 != debian/defs.mk ]; then \
		rm -f $$f2; \
            fi; \
        done
	rm -f po/POTFILES.in

	dh_clean -v
	


install:
install: build stamp-control
	@echo "RULES.install"
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	# Sort of hackish way to make sure we have a init script 
	# for dh_installinit
	cp support-files/mysql.server debian/mysql-server-$(MYSQL_BRANDED_BASE_VERSION).mysql.init

	mkdir -p $(TMP)/usr/lib/mysql/mysqld.sym
	cp sql/mysqld.sym $(TMP)/usr/lib/mysql/mysqld.sym

	# TODO: need real man pages!
	#for f in mysql mysqldump mysqlaccess mysqladmin mysqlshow myisam_ftdump myisamlog myisampack mysql_explain_log mysqld_multi mysqld_safe mysql_fix_privilege_tables mysql_upgrade mysql_tzinfo_to_sql mysql_zap perror replace safe_mysqld ; do touch $(TMP)/usr/share/man/man1/$$f.1 ; done
	#for f in mysqld mysqlmanager ; do touch $(TMP)/usr/share/man/man8/$$f.8 ; done
	# make install (trailing slash needed for innobase)
	$(MAKE) install DESTDIR=$(TMP)/

	# After installing, remove rpath to make lintian happy.
	set +e; \
	find ./debian/tmp/ -type f -print0 \
		| xargs -0 --no-run-if-empty chrpath -k 2>/dev/null \
		| fgrep RPATH= \
		| cut -d: -f 1 \
		| xargs --no-run-if-empty chrpath -d; \
	set -e

	# libmysqlclient: move shared libraries (but not the rest like libheap.a & co)
	mv $(TMP)/usr/lib/mysql/libmysqlclient* $(TMP)/usr/lib
	mv $(TMP)/usr/lib/mysql/libndbclient* $(TMP)/usr/lib
	perl -pi -e 's#/usr/lib/mysql#/usr/lib#' $(TMP)/usr/lib/libmysqlclient.la
	perl -pi -e 's#/usr/lib/mysql#/usr/lib#' $(TMP)/usr/lib/libmysqlclient_r.la
	perl -pi -e 's#/usr/lib/mysql#/usr/lib#' $(TMP)/usr/lib/libndbclient.la

	# Check if our beloved versioned symbols are really there
	if [ "`objdump -T $(TMP)/usr/lib/libmysqlclient.so.$(SHARED_LIB_MAJOR_VERSION).0.0 | grep -c libmysqlclient_$(SHARED_LIB_MAJOR_VERSION)`" -lt 500 ]; then \
	  echo "ERROR: versioned symbols are absent"; \
	  exit 1; \
	fi     
	if [ "`objdump -T $(TMP)/usr/lib/libndbclient.so.$(NDB_SHARED_LIB_MAJOR_VERSION).0.0 | grep -c libndbclient_$(NDB_SHARED_LIB_MAJOR_VERSION)`" -lt 500 ]; then \
          echo "ERROR: versioned symbols are absent from libndbclient"; \
          exit 1; \
        fi

	# libmysqlclient-dev: forgotten header file since 3.23.25?
	cp include/my_config.h $(TMP)/usr/include/mysql/
	cp include/my_dir.h $(TMP)/usr/include/mysql/

	# mysql-common: We now provide our own config file.
	install -d $(TMP)/etc/mysql
	install -m 0644 debian/additions/my.cnf $(TMP)/etc/mysql/my.cnf

	pod2man scripts/mysqlhotcopy $(TMP)/usr/share/man/man1/mysqlhotcopy.1

	# mysql-server
	install -m 0755 scripts/mysqld_safe $(TMP)/usr/bin/mysqld_safe
	mkdir -p $(TMP)/usr/share/doc/mysql-server-$(MYSQL_BRANDED_BASE_VERSION)/examples
	mv $(TMP)/usr/share/mysql/*cnf 	    $(TMP)/usr/share/doc/mysql-server-$(MYSQL_BRANDED_BASE_VERSION)/examples/
	rm -vf $(TMP)/usr/share/mysql/mi_test_all* \
	       $(TMP)/usr/share/mysql/mysql-log-rotate \
	       $(TMP)/usr/share/mysql/mysql.server \
	       $(TMP)/usr/share/mysql/binary-configure

	# we can't install *.pl into /usr/bin - so we have to rename it.
	sed "s#filename => 'ndb_size.tmpl#filename => '/usr/share/mysql/ndb_size.tmpl#" < $(TMP)/usr/bin/ndb_size.pl > $(TMP)/usr/bin/ndb_size
	cp -a mysql-test $(TMP)/usr/share/mysql/
	cp -a sql-bench $(TMP)/usr/share/mysql/
	# lintian overrides
	mkdir -p $(TMP)/usr/share/lintian/overrides/
	cp debian/mysql-server-$(MYSQL_BRANDED_BASE_VERSION).lintian-overrides $(TMP)/usr/share/lintian/overrides/mysql-server-$(MYSQL_BRANDED_BASE_VERSION)
	cp debian/mysql-client-$(MYSQL_BRANDED_BASE_VERSION).lintian-overrides $(TMP)/usr/share/lintian/overrides/mysql-client-$(MYSQL_BRANDED_BASE_VERSION)

	# For 4.1 -> 5.0 transition
	d=$(TMP)/usr/share/mysql-common/internal-use-only/; \
	mkdir -p $$d; \
	cp debian/mysql-server-$(MYSQL_BRANDED_BASE_VERSION).mysql.init $$d/_etc_init.d_mysql; \
	cp debian/mysql-server-$(MYSQL_BRANDED_BASE_VERSION).mysql-server.logrotate $$d/_etc_logrotate.d_mysql-server; \

	dh_movefiles

# Build architecture-independent files here.
binary-indep: build install
	@echo "RULES.binary-indep"
	dh_testdir -i
	dh_testroot -i
	dh_installdebconf -i
	dh_installdocs -i
	dh_installexamples -i
	dh_installmenu -i
	dh_installlogrotate -i
	dh_installinit -i
	dh_installcron -i 
	dh_installman -i
	dh_installinfo -i
	dh_installlogcheck -i
	dh_installchangelogs -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_perl -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: build install
	@echo "RULES.binary-arch"
	dh_testdir 
	dh_testroot

	dh_installdebconf -a
	dh_installdocs -a
	dh_installexamples -a
	dh_installmenu -a
	dh_installlogrotate -a --name mysql-server
	# Start mysql in runlevel 19 before 20 where apache, proftpd etc gets
	# started which might depend on a running database server.
	dh_installinit -a --name=mysql-storage 	-- defaults 19 21
	dh_installinit -a --name=mysql		-- defaults 19 21
	dh_installinit -a --name=mysql-management 	-- defaults 20
	dh_installcron -a --name mysql-server
	dh_installman -a
	dh_installinfo -a
	dh_installlogcheck -a
	dh_installchangelogs -a
	dh_strip -a
	dh_link -a	# .so muss nach .so.1.2.3 installier werden!
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a
	dh_makeshlibs -plibmysqlclient$(SHARED_LIB_MAJOR_VERSION) -V"libmysqlclient$(SHARED_LIB_MAJOR_VERSION) (>= $(PKGVERSION))"
	dh_makeshlibs -plibndbclient$(NDB_SHARED_LIB_MAJOR_VERSION) -V"libndbclient2 (>= $(PKGVERSION))"
	dh_installdeb -a
	dh_perl -a
	dh_shlibdeps -a -l debian/libmysqlclient$(SHARED_LIB_MAJOR_VERSION)/usr/lib -L libmysqlclient$(SHARED_LIB_MAJOR_VERSION)
	dh_shlibdeps -a -l debian/libndbclient$(NDB_SHARED_LIB_MAJOR_VERSION)/usr/lib -L libndbclient$(NDB_SHARED_LIB_MAJOR_VERSION)
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

source diff:
	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false

binary:	binary-indep binary-arch
.PHONY: clean stamp-control control-file configure build binary binary-indep binary-arch install 

# vim: ts=8
