#                                                                    -*-perl-*-
$description = "Test the realpath functions.";

$details = "";

# Check the local directory's realpath
run_make_test('
ifneq ($(realpath .),$(CURDIR))
  $(warning $(realpath .) != $(CURDIR))
endif

ifneq ($(realpath ./),$(CURDIR))
  $(warning $(realpath ./) != $(CURDIR))
endif

ifneq ($(realpath .///),$(CURDIR))
  $(warning $(realpath .///) != $(CURDIR))
endif

.PHONY: all
all: ; @:
',
              '', '');

# Find the realpath to the root of the partition
create_file('root.mk', 'all:;$(info $(realpath /))');
my $root = `$make_path -sf root.mk`;
unlink('root.mk');
chomp $root;

my $tst = '
ifneq ($(realpath /.),#ROOT#)
  $(warning $(realpath /.) != #ROOT#)
endif

ifneq ($(realpath /./),#ROOT#)
  $(warning $(realpath /./) != #ROOT#)
endif

ifneq ($(realpath /.///),#ROOT#)
  $(warning $(realpath /.///) != #ROOT#)
endif

ifneq ($(realpath /..),#ROOT#)
  $(warning $(realpath /..) != #ROOT#)
endif

ifneq ($(realpath /../),#ROOT#)
  $(warning $(realpath /../) != #ROOT#)
endif

ifneq ($(realpath /..///),#ROOT#)
  $(warning $(realpath /..///) != #ROOT#)
endif

ifneq ($(realpath . /..),$(CURDIR) #ROOT#)
  $(warning $(realpath . /..) != $(CURDIR) #ROOT#)
endif

.PHONY: all
all: ; @:
';
$tst =~ s/#ROOT#/$root/g;
run_make_test($tst, '', '');

# On Windows platforms "//" means something special.  So, don't do these tests
# there.

if ($port_type ne 'W32') {
  $tst = '
ifneq ($(realpath ///),#ROOT#)
  $(warning $(realpath ///) != #ROOT#)
endif

ifneq ($(realpath ///.),#ROOT#)
  $(warning $(realpath ///.) != #ROOT#)
endif

ifneq ($(realpath ///..),#ROOT#)
  $(warning $(realpath ///..) != #ROOT#)
endif

.PHONY: all
all: ; @:';
  $tst =~ s/#ROOT#/$root/g;

  run_make_test($tst, '', '');
}


# This tells the test driver that the perl test script executed properly.
1;
