#                                                              -*-mode: perl-*-

$description = "Test GNU Make's archive management features.";

$details = "\
This only works on systems that support it.";

# If this instance of make doesn't support archives, skip it
exists $FEATURES{archives} or return -1;

# In theory archive support exists on Windows but it doesn't use ar;
# someone will need to port this test.
$port_type eq 'W32' and return -1;

# Create some .o files to work with
if ($osname eq 'VMS') {
  # VMS AR needs real object files at this time.
  foreach $afile ('a1', 'a2', 'a3') {
    # Use non-standard extension to prevent implicit rules from recreating
    # objects when the test tampers with the timestamp.
    1 while unlink "$afile.c1";
    1 while unlink "$afile.o";
    create_file("$afile.c1", "int $afile(void) {return 1;}\n");
    system("cc $afile.c1 /object=$afile.o");
  }
} else {
  utouch(-60, qw(a1.o a2.o a3.o));
}

# Fallback if configure did not find AR
my $ar = get_config('AR') || 'ar';

my $redir = '2>&1';
$redir = '' if $osname eq 'VMS';

# This is the value from src/default.c
my $arflags = $osname eq 'aix' ? '-Xany -rv' : '-rv';
my $arvar = "AR=\"$ar\"";

# Newer versions of binutils can be built with --enable-deterministic-archives
# which forces all timestamps (among other things) to always be 0, defeating
# GNU Make's archive support.  See if ar supports the U option to disable it.
unlink('libxx.a');
$_ = `"$ar" ${arflags}U libxx.a a1.o $redir`;
if ($? == 0) {
    $arflags = "${arflags}U";
    $arvar = "$arvar ARFLAGS=\"$arflags\"";
}

# Some versions of ar print different things on creation.  Find out.
unlink('libxx.a');
my $created = `"$ar" $arflags libxx.a a1.o $redir`;
$created =~ s/a1\.o/#OBJECT#/g;

# Some versions of ar print different things on add.  Find out.
my $add = `"$ar" $arflags libxx.a a2.o $redir`;
$add =~ s/a2\.o/#OBJECT#/g;

# Some versions of ar print different things on replacement.  Find out.
my $repl = `"$ar" $arflags libxx.a a2.o $redir`;
$repl =~ s/a2\.o/#OBJECT#/g;

unlink('libxx.a');

# Very simple
($_ = $created) =~ s/#OBJECT#/a1.o/g;
my $answer = "$ar $arflags libxx.a a1.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a1.o';
}
run_make_test('all: libxx.a(a1.o)', $arvar, $answer);

# Multiple .o's.  Add a new one to the existing library
($_ = $add) =~ s/#OBJECT#/a2.o/g;

$answer = "$ar $arflags libxx.a a2.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a2.o';
}
run_make_test('all: libxx.a(a1.o a2.o)', $arvar, $answer);

# Touch one of the .o's so it's rebuilt
if ($port_type eq 'VMS-DCL') {
  # utouch is not changing what VMS library compare is testing for.
  # So do a real change by regenerating the file.
  1 while unlink('a1.o');
  # Later time stamp than last insertion.
  sleep(2);
  system('cc a1.c1 /object=a1.o');
  # Next insertion will have a later timestamp.
  sleep(2);
} else {
  utouch(-40, 'a1.o');
}

($_ = $repl) =~ s/#OBJECT#/a1.o/g;
$answer = "$ar $arflags libxx.a a1.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a1.o';
}
run_make_test(undef, $arvar, $answer);

# Use wildcards
$answer = "#MAKE#: Nothing to be done for 'all'.\n";
run_make_test('all: libxx.a(*.o)', $arvar, $answer);

# Touch one of the .o's so it's rebuilt
if ($port_type eq 'VMS-DCL') {
  # utouch is not changing what VMS library compare is testing for.
  # So do a real change by regenerating the file.
  1 while unlink('a1.o');
  # Make timestamp later than last insertion.
  sleep(2);
  system('cc a1.c1 /object=a1.o');
} else {
  utouch(-30, 'a1.o');
}
($_ = $repl) =~ s/#OBJECT#/a1.o/g;
$answer = "$ar $arflags libxx.a a1.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a1.o';
}
run_make_test(undef, $arvar, $answer);

# Use both wildcards and simple names
if ($port_type eq 'VMS-DCL') {
  # utouch is not changing what VMS library compare is testing for.
  # So do a real change by regenerating the file.
  1 while unlink('a2.o');
  sleep(2);
  system('cc a2.c1 /object=a2.o');
} else {
  utouch(-50, 'a2.o');
}
($_ = $add) =~ s/#OBJECT#/a3.o/g;
$_ .= "$ar $arflags libxx.a a2.o\n";
($_ .= $repl) =~ s/#OBJECT#/a2.o/g;
$answer = "$ar $arflags libxx.a a3.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a3.o';
}

run_make_test('all: libxx.a(a3.o *.o)', $arvar, $answer);

# Check whitespace handling
if ($port_type eq 'VMS-DCL') {
  # utouch is not changing what VMS library compare is testing for.
  # So do a real change by regenerating the file.
  1 while unlink('a2.o');
  sleep(2);
  system('cc a2.c1 /object=a2.o');
} else {
  utouch(-40, 'a2.o');
}
($_ = $repl) =~ s/#OBJECT#/a2.o/g;
$answer = "$ar $arflags libxx.a a2.o\n$_";
if ($port_type eq 'VMS-DCL') {
  $answer = 'library /replace libxx.a a2.o';
}
run_make_test('all: libxx.a(  a3.o    *.o     )', $arvar, $answer);

rmfiles(qw(a1.c1 a2.c1 a3.c1 a1.o a2.o a3.o libxx.a));

# Check non-archive targets
# See Savannah bug #37878
$mk_string = q!
all: foo(bar).baz
foo(bar).baz: ; @echo '$@'
!;

if ($port_type eq 'VMS-DCL') {
    $mk_string =~ s/echo/write sys\$\$output/;
    $mk_string =~ s/\'/\"/g;
}
run_make_test($mk_string, $arvar, "foo(bar).baz\n");

# Check renaming of archive targets.
# See Savannah bug #38442

mkdir('artest', 0777);
touch('foo.vhd');
$mk_string = q!
DIR = artest
vpath % $(DIR)
default: lib(foo)
(%): %.vhd ; @cd $(DIR) && touch $(*F) && $(AR) $(ARFLAGS) $@ $(*F) >/dev/null 2>&1 && rm $(*F)
.PHONY: default
!;
if ($port_type eq 'VMS-DCL') {
  $mk_string =~ s#= artest#= sys\$\$disk:\[.artest\]#;
  $mk_string =~ s#lib\(foo\)#lib.tlb\(foo\)#;
  $mk_string =~ s#; \@cd#; pipe SET DEFAULT#;
  $mk_string =~
    s#touch \$\(\*F\)#touch \$\(\*F\) && library/create/text sys\$\$disk:\$\@#;
  $mk_string =~
    s#library#if f\$\$search(\"\$\@\") \.eqs\. \"\" then library#;
  # VMS needs special handling for null extension
  $mk_string =~ s#\@ \$\(\*F\)#\@ \$\(\*F\)\.#;
  $mk_string =~ s#>/dev/null 2>&1 ##;
}
run_make_test($mk_string, $arvar, "");

run_make_test(undef, $arvar, "#MAKE#: Nothing to be done for 'default'.\n");

unlink('foo.vhd');
if ($osname eq 'VMS') {
  remove_directory_tree("$cwdpath/artest");
} else {
  remove_directory_tree('artest');
}

# Check long names for archive members.
# See Savannah bug #54395

if ($osname ne 'VMS' && $osname ne 'os390') {
    my $pre = '1234567890123456';
    my $lib = 'libxx.a';
    my $cr = $created;
    $cr =~ s/#OBJECT#/${pre}a/g;
    my $ad = $add;
    $ad =~ s/#OBJECT#/${pre}b/g;

    run_make_test(qq!
# Both member names > 16 characters long
default: $lib(${pre}a) $lib(${pre}b)

(%): % ; \$(AR) \$(ARFLAGS) \$@ \$%

$pre%: ; touch \$\@
!,
                  $arvar, "touch ${pre}a\n$ar $arflags $lib ${pre}a\n${cr}touch ${pre}b\n$ar $arflags $lib ${pre}b\n${ad}rm ${pre}a ${pre}b\n");

    # Run it again; nothing should happen
    run_make_test(undef, $arvar, "#MAKE#: Nothing to be done for 'default'.\n");

    unlink($lib);
}

# SV 61436 : Allow redefining archive rules to propagate timestamps

# These don't work right on z/OS for some reason: archives not fully supported?

if ($osname ne 'os390') {
# Find the output when creating an archive from multiple files

utouch(-10, 'a.o', 'b.o');
my $create2 = `"$ar" $arflags mylib.a a.o b.o $redir`;
touch('b.o');
my $add2 = `"$ar" $arflags mylib.a b.o $redir`;
unlink('a.o', 'b.o', 'mylib.a');

# Some systems complain when compiling empty files
create_file('a.c', 'int i;');
create_file('b.c', 'int j;');
utouch(-20, 'a.c', 'b.c');

my $cc = get_config('CC') || 'cc';
my $vars = "CC=\"$cc\" $arvar";

run_make_test(q!
mylib.a: mylib.a(a.o b.o)
(%): % ;
%.a: ; $(AR) $(ARFLAGS) $@ $?
%.o : %.c ; @echo Compile $<; $(COMPILE.c) -o $@ $<
!,
              $vars, "Compile a.c\nCompile b.c\n$ar $arflags mylib.a a.o b.o\n${create2}rm b.o a.o");

run_make_test(undef, $vars, "#MAKE#: 'mylib.a' is up to date.");

# Now update one of the source files and it should be compiled and archived

sleep(2);
touch('b.c');

run_make_test(undef, $vars, "Compile b.c\n$ar $arflags mylib.a b.o\n${add2}rm b.o");

run_make_test(undef, $vars, "#MAKE#: 'mylib.a' is up to date.");

unlink('a.c', 'b.c', 'a.o', 'b.o', 'mylib.a');
}

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