Rombobjörn

summaryrefslogtreecommitdiff
path: root/testsuite/sources/embedding/check_pathnames.adb
blob: 9da0cf4823cf4316773ff00427a061076f65a5d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
-- part of Comfignat's testsuite
-- Copyright 2025 B. Persson, Bjorn@Rombobeorn.se
--
-- This material is provided as is, with absolutely no warranty expressed
-- or implied. Any use is at your own risk.
--
-- Permission is hereby granted to use or copy this testsuite
-- for any purpose, provided the above notices are retained on all copies.
-- Permission to modify the code and to distribute modified code is granted,
-- provided the above notices are retained, and a notice that the code was
-- modified is included with the above copyright notice.


with Ada.Text_IO;      use Ada.Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
with GNAT.Regexp;      use GNAT.Regexp;

procedure Check_Pathnames is

   Result : Exit_Status := Success;

   procedure Check_Pattern(Name : String; Pattern : String; Value : String) is
   begin
      if not Match(Value, Compile(Pattern)) then
         Put_Line(Current_Error,
                  "Bad value of " & Name &
                  ": expected """ & Pattern & """, got """ & Value & '"');
         Result := Failure;
      end if;
   end Check_Pattern;

   procedure Check_Relocatable(Name : String; Value : String) is
      Relocatable : constant Boolean := $Relocatable;
   begin
      if (Value(Value'First) = '/') = Relocatable then
         Put_Line(Current_Error,
                  Name & " is not " &
                  (if Relocatable then "relative" else "absolute") &
                  ": """ & Value & '"');
         Result := Failure;
      end if;
   end Check_Relocatable;

   Bindir      : constant String := $Bindir;
   Libexecdir  : constant String := $Libexecdir;
   Datadir     : constant String := $Datadir;
   Sysconfdir  : constant String := $Sysconfdir;
   Statedir    : constant String := $Statedir;
   Cachedir    : constant String := $Cachedir;
   Logdir      : constant String := $Logdir;
   Runstatedir : constant String := $Runstatedir;
   Lockdir     : constant String := $Lockdir;
   Libdir      : constant String := $Libdir;
   Localedir   : constant String := $Localedir;
   Mandir      : constant String := $Mandir;
   Infodir     : constant String := $Infodir;
   Miscdocdir  : constant String := $Miscdocdir;

begin
   -- Check those parts of the pathnames that are unchanged in all of
   -- Comfignat's tests.
   Check_Pattern("Bindir",      ".+/bin",       Bindir);
   Check_Pattern("Libexecdir",  ".+/libexec",   Libexecdir);
   Check_Pattern("Datadir",     ".+/share",     Datadir);
   Check_Pattern("Sysconfdir",  ".+/etc",       Sysconfdir);
   Check_Pattern("Statedir",    ".*/var/lib",   Statedir);
   Check_Pattern("Cachedir",    ".*/var/cache", Cachedir);
   Check_Pattern("Logdir",      ".*/var/log",   Logdir);
   Check_Pattern("Runstatedir", "/run",         Runstatedir);
   Check_Pattern("Lockdir",     "/run/lock",    Lockdir);
   Check_Pattern("Libdir",      ".+lib.*",      Libdir);
   Check_Pattern("Localedir",   ".+/locale",    Localedir);
   Check_Pattern("Mandir",      ".+/man",       Mandir);
   Check_Pattern("Infodir",     ".+/info",      Infodir);
   Check_Pattern("Miscdocdir",  ".+/doc",       Miscdocdir);

   -- All except Runstatedir and Lockdir shall be relative pathnames in a
   -- relocatable build.
   Check_Relocatable("Bindir",      Bindir);
   Check_Relocatable("Libexecdir",  Libexecdir);
   Check_Relocatable("Datadir",     Datadir);
   Check_Relocatable("Sysconfdir",  Sysconfdir);
   Check_Relocatable("Statedir",    Statedir);
   Check_Relocatable("Cachedir",    Cachedir);
   Check_Relocatable("Logdir",      Logdir);
   Check_Relocatable("Libdir",      Libdir);
   Check_Relocatable("Localedir",   Localedir);
   Check_Relocatable("Mandir",      Mandir);
   Check_Relocatable("Infodir",     Infodir);
   Check_Relocatable("Miscdocdir",  Miscdocdir);

   Set_Exit_Status(Result);
end Check_Pathnames;