#-------------------------------------------------------------------------
#
# GNUmakefile--
#    Makefile for src/test/regress (the regression tests)
#
# Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
# src/test/regress/GNUmakefile
#
#-------------------------------------------------------------------------

subdir = src/test/regress
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global

# file with extra config for temp build
TEMP_CONF = --temp-config=$(srcdir)/make_check_postgresql.conf
TEMP_CONF_2PC = --temp-config=$(srcdir)/make_check_postgresql_2pc.conf
ifdef TEMP_CONFIG
TEMP_CONF += --temp-config=$(TEMP_CONFIG)
endif

d=12
c=3
p=25632
s=1
runtest=1
n=2002
dir=./tmp_check
hdfscfgpath=''
hdfsstoreplus=''
hdfshostname='10.185.181.101:25000,10.185.181.155'
obshostname='10.175.38.76'
obsbucket='gaussdb'
abs_gausshome='$(GAUSSHOME)'
keep_last_data=false

qunit_module=''
qunit_level=''

# where to find psql for testing an existing installation
PSQLDIR = $(bindir)

# maximum simultaneous connections for parallel tests
MAXCONNOPT =
ifdef MAX_CONNECTIONS
MAXCONNOPT += --max-connections=$(MAX_CONNECTIONS)
endif

# stuff to pass into build of pg_regress
EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
	'-DMAKEPROG="$(MAKE)"' \
	'-DSHELLPROG="$(SHELL)"' \
	'-DDLSUFFIX="$(DLSUFFIX)"'

##
## Prepare for tests
##

# Build regression test driver

all: pg_regress$(X)

pg_regress$(X): pg_regress.o pg_regress_main.o | submake-libpgport
	$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@

# dependencies ensure that path changes propagate
pg_regress.o: pg_regress.cpp $(top_builddir)/src/port/pg_config_paths.h
pg_regress.o: override CPPFLAGS += -I$(top_builddir)/src/port $(EXTRADEFS)

$(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/Makefile.global
	$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h

install: all installdirs
	$(INSTALL_PROGRAM) pg_regress$(X) '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
	$(MAKE) -C $(srcdir)/stub/roach_api_stub install

installdirs:
	$(MKDIR_P) '$(DESTDIR)$(pgxsdir)/$(subdir)'

uninstall:
	rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'


# Build dynamically-loaded object file for CREATE FUNCTION ... LANGUAGE C.

NAME = regress
OBJS = regress.o

include $(top_srcdir)/src/Makefile.shlib

all: all-lib

# Test input and expected files.  These are created by pg_regress itself, so we
# don't have a rule to create them.  We do need rules to clean them however.
input_files = $(patsubst $(srcdir)/input/%.source,sql/%.sql, $(wildcard $(srcdir)/input/*.source))
output_files := $(patsubst $(srcdir)/output/%.source,expected/%.out, $(wildcard $(srcdir)/output/*.source))


# not installed by default

regress_data_files = \
	$(filter-out $(addprefix $(srcdir)/,$(output_files)),$(wildcard $(srcdir)/expected/*.out)) \
	$(wildcard $(srcdir)/input/*.source) \
	$(wildcard $(srcdir)/output/*.source) \
	$(filter-out $(addprefix $(srcdir)/,$(input_files)),$(wildcard $(srcdir)/sql/*.sql)) \
	$(wildcard $(srcdir)/data/*.data) \
	$(srcdir)/parallel_schedule $(srcdir)/serial_schedule $(srcdir)/resultmap

install-tests: all install install-lib installdirs-tests
	$(MAKE) -C $(top_builddir)/contrib/spi install
	for file in $(regress_data_files); do \
	  $(INSTALL_DATA) $$file '$(DESTDIR)$(pkglibdir)/regress/'$$file || exit; \
	done

installdirs-tests: installdirs
	$(MKDIR_P)  $(patsubst $(srcdir)/%/,'$(DESTDIR)$(pkglibdir)/regress/%',$(sort $(dir $(regress_data_files))))


# Get some extra C modules from contrib/spi and contrib/dummy_seclabel...

all: refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX)
	chmod +x ./smartmatch.pl
	
refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX)
	cp $< $@

autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX)
	cp $< $@

dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX)
	cp $< $@

$(top_builddir)/contrib/spi/refint$(DLSUFFIX): $(top_srcdir)/contrib/spi/refint.cpp
	$(MAKE) -C $(top_builddir)/contrib/spi refint$(DLSUFFIX)

$(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): $(top_srcdir)/contrib/spi/autoinc.cpp
	$(MAKE) -C $(top_builddir)/contrib/spi autoinc$(DLSUFFIX)

$(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel.cpp
	$(MAKE) -C $(top_builddir)/contrib/dummy_seclabel dummy_seclabel$(DLSUFFIX)

# Tablespace setup

.PHONY: tablespace-setup
tablespace-setup:
	rm -rf ./testtablespace
	mkdir ./testtablespace
		
##
## Run tests
##

REGRESS_OPTS = --dlpath=. $(EXTRA_REGRESS_OPTS)
REG_CONF = --regconf=regress.conf

check: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) -n $(n) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(TEMP_CONF) $(EXTRA_TESTS) $(REG_CONF)
2pccheck: all tablespace-setup
	export PATH=/home/V1R5Trunk_uttest/Code/src/test/regress/tmp_check/install/home/V1R5Trunk_uttest/install/bin:$(PATH) && \
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 4 -c 2 -p $(p) -r $(runtest) -b $(dir) --schedule=$(srcdir)/parallel_schedule_2pc $(MAXCONNOPT) $(TEMP_CONF_2PC) $(EXTRA_TESTS) $(REG_CONF)

redischeck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 8 -c 1 -p $(p) -r $(runtest) -b $(dir) --schedule=$(srcdir)/parallel_schedule$(PART).redistribute --keep_last_data=${keep_last_data} $(MAXCONNOPT) $(TEMP_CONF) $(EXTRA_TESTS) $(REG_CONF)

wlmcheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	cp /home/$$(whoami)/etc/gscgroup_$$(whoami).cfg $$GAUSSHOME/etc/; \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) --schedule=$(srcdir)/parallel_schedule.wlm --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_wlmcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

redocheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -s $(s) -b $(dir) --schedule=$(srcdir)/parallel_schedule.redo $(MAXCONNOPT)  --temp-config=$(srcdir)/make_redocheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)
	
redochecksmall: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -s $(s) -b $(dir) --schedule=$(srcdir)/parallel_schedule.redosmall $(MAXCONNOPT)  --temp-config=$(srcdir)/make_redocheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

fastcheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) -n $(n) --abs_gausshome=$(abs_gausshome) --schedule=$(srcdir)/parallel_schedule$(PART) -w --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

fastcheck_parallel_initdb: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) --parallel_initdb -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) -n $(n) --abs_gausshome=$(abs_gausshome) --schedule=$(srcdir)/parallel_schedule$(PART) -w --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

qunitcheck: all tablespace-setup
	$(MAKE) -C ../QUnit/src  && export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
    $(pg_regress_check) $(REGRESS_OPTS) --qunit --qunit_module $(qunit_module) --qunit_level $(qunit_level)  --parallel_initdb -d $(d) -c $(c) -p $(p) -r 0 -b $(dir) -n $(n) --abs_gausshome=$(abs_gausshome) --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

securitycheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) -n $(n) --securitymode --schedule=$(srcdir)/security_schedule$(PART) -w --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

obscheck:all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) --obshostname='10.175.38.120' --obsbucket='gaussdbcheck'  --ak='7AITLRUGJLGJTROEVLBR'  --sk='KlCUvfBPBwKq1JaAapfZLMgUX36257nmxw7db6XV' --schedule=$(srcdir)/obs_schedule$(PART) --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

orccheckxian: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 2 -c 2 -p $(p) -r $(runtest) -b $(dir) --hdfshostname=$(hdfshostname) --hdfscfgpath=$(hdfscfgpath) --hdfsport=25000 --schedule=$(srcdir)/orc_schedule$(PART) --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

obsorccheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 2 -c 2 -p $(p) -r $(runtest) -b $(dir) --obshostname='10.175.38.120' --obsbucket='gaussdbcheck' --ak='7AITLRUGJLGJTROEVLBR' --sk='KlCUvfBPBwKq1JaAapfZLMgUX36257nmxw7db6XV' --schedule=$(srcdir)/obs_orc_schedule$(PART) --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_obsorccheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

dfscheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d $(d) -c $(c) -p $(p) -r $(runtest) -b $(dir) --hdfshostname=$(hdfshostname) --hdfsstoreplus=$(hdfsstoreplus) --hdfscfgpath=$(hdfscfgpath) --hdfsport=25000 --schedule=$(srcdir)/dfs_schedule$(PART) --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

dfsredischeck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 2 -c 1 -p $(p) -r $(runtest) -b $(dir) --hdfshostname=$(hdfshostname) --hdfsstoreplus=$(hdfsstoreplus) --hdfscfgpath=$(hdfscfgpath) --hdfsport=25000 --schedule=$(srcdir)/parallel_schedule$(PART).dfsredistribute $(MAXCONNOPT) $(TEMP_CONF) $(EXTRA_TESTS) $(REG_CONF)
	
orcchecksmall: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 2 -c 2 -p $(p) -r $(runtest) -b $(dir) --hdfshostname=$(hdfshostname) --hdfscfgpath=$(hdfscfgpath) --hdfsport=25000 --schedule=$(srcdir)/orc_schedule_small --keep_last_data=${keep_last_data} $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

orccheckusa: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) -d 2 -c 2 -p $(p) -r $(runtest) -b $(dir) --hdfshostname=10.122.195.197 --hdfsport=8020 --schedule=$(srcdir)/orc_schedule $(MAXCONNOPT) --temp-config=$(srcdir)/make_fastcheck_postgresql.conf $(EXTRA_TESTS) $(REG_CONF)

installcheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule $(EXTRA_TESTS) $(REG_CONF)

installcheck-parallel: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS) $(REG_CONF)

standbycheck: all
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/standby_schedule --use-existing $(REG_CONF)

# old interfaces follow...

runcheck: check
runtest: installcheck
runtest-parallel: installcheck-parallel

bigtest: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule numeric_big $(REG_CONF)

bigcheck: all tablespace-setup
	export LD_LIBRARY_PATH=$(SSL_LIB_PATH):$(LD_LIBRARY_PATH) && \
	$(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big $(REG_CONF)


##
## Clean up
##

clean distclean maintainer-clean: clean-lib
# things built by `all' target
	rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX)
	rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
# things created by various check targets
	rm -f $(output_files) $(input_files)
	rm -rf testtablespace
	rm -rf $(pg_regress_clean_files)
	$(MAKE) -C $(srcdir)/stub/roach_api_stub clean
