]> granicus.if.org Git - fortune-mod/blob - CI-testing/continuous-integration-testing.pl
gh actions #3: win32 fix pacman
[fortune-mod] / CI-testing / continuous-integration-testing.pl
1 #!/usr/bin/env perl
2
3 use 5.014;
4 use strict;
5 use warnings;
6 use autodie;
7
8 use Path::Tiny qw/ path cwd /;
9 use Getopt::Long qw/ GetOptions /;
10
11 sub do_system
12 {
13     my ($args) = @_;
14
15     my $cmd = $args->{cmd};
16     print "Running [@$cmd]\n";
17     if ( system(@$cmd) )
18     {
19         die "Running [@$cmd] failed!";
20     }
21 }
22 my $cwd = cwd();
23
24 my $IS_WIN = ( $^O eq "MSWin32" );
25 my $MAKE   = $IS_WIN ? 'gmake' : 'make';
26
27 my $SEP  = $IS_WIN ? "\\" : '/';
28 my $SUDO = $IS_WIN ? ''   : 'sudo';
29
30 my $cmake_gen;
31 GetOptions( 'gen=s' => \$cmake_gen, )
32     or die 'Wrong options';
33
34 local $ENV{RUN_TESTS_VERBOSE} = 1;
35 if ( defined $cmake_gen )
36 {
37     $ENV{CMAKE_GEN} = $cmake_gen;
38 }
39
40 sub _transform
41 {
42     return shift(@_) =~ s%\\%\\\\%gr;
43 }
44 mkdir('B');
45 chdir('B');
46
47 my $cmake_common_args = ""
48     . ( defined($cmake_gen) ? qq# -G "$cmake_gen" # : "" )
49     . (
50     defined( $ENV{CMAKE_MAKE_PROGRAM} )
51     ? " -DCMAKE_MAKE_PROGRAM=$ENV{CMAKE_MAKE_PROGRAM} "
52     : ""
53     ) . ( $IS_WIN ? " -DCMAKE_BUILD_TYPE=Debug " : "" );
54
55 if ( !$ENV{SKIP_RINUTILS_INSTALL} )
56 {
57     do_system(
58         {
59             cmd => [ qw#git clone https://github.com/shlomif/rinutils#, ]
60         }
61     );
62     do_system(
63         {
64             cmd => [
65                       qq#cd rinutils && mkdir B && cd B && cmake #
66                     . $cmake_common_args
67                     . " -DWITH_TEST_SUITE=OFF "
68                     . ( $IS_WIN ? " -DCMAKE_INSTALL_PREFIX=C:/foo " : '' )
69                     . qq# .. && $SUDO $MAKE install#
70             ]
71         }
72     );
73 }
74 do_system( { cmd => [ "cmake", "--version" ] } );
75 my $CMAKE_PREFIX_PATH;
76
77 if ($IS_WIN)
78 {
79     $CMAKE_PREFIX_PATH = join ";", ( map { ; $IS_WIN ? "c:$_" : $_ } ("/foo") );
80
81     ( $ENV{CMAKE_PREFIX_PATH} //= '' ) .= ";$CMAKE_PREFIX_PATH;";
82
83     # ( $ENV{PKG_CONFIG_PATH} //= '' ) .= ";C:\\foo\\lib\\pkgconfig;";
84     ( $ENV{PKG_CONFIG_PATH} //= '' ) .=
85         ";/foo/lib/pkgconfig/;/c/foo/lib/pkgconfig/";
86     $ENV{RINUTILS_INCLUDE_DIR} = "C:/foo/include";
87
88     # for warning flags.
89     $ENV{FCS_GCC} = 1;
90 }
91 chdir($cwd);
92 $cwd->child('B')->remove_tree( { safe => 0, } );
93
94 my $W = "-DTARGET_ARCH=x86_64-w64-mingw32";    # -G Ninja ..
95 my $WIN32__DOUBLE_AMPERSAND__PROPER_HANDLING__NEEDED_PREFIX = "cd . &&";
96 print "PATH = <<$ENV{PATH}>>\n";
97 do_system(
98     {
99         cmd => [
100 "$WIN32__DOUBLE_AMPERSAND__PROPER_HANDLING__NEEDED_PREFIX mkdir B && cd B && cmake"
101                 . (
102                 defined($CMAKE_PREFIX_PATH)
103                 ? ( " -DCMAKE_PREFIX_PATH=" . _transform($CMAKE_PREFIX_PATH) )
104                 : ''
105                 )
106                 . " "
107                 . (
108                 $IS_WIN
109                 ? ( $cmake_common_args
110                         . "$W -DCMAKE_INSTALL_PREFIX=c:/foo "
111                         . " -DUSE_WIN32_REGEX_LIBS=TRUE "
112                         . " ../fortune-mod && $MAKE && $MAKE install && $MAKE check"
113                     )
114                 : ( $cmake_common_args
115                         . " ../fortune-mod && $MAKE && $MAKE check" )
116                 )
117         ]
118     }
119 );
120 if ($IS_WIN)
121 {
122     my $gdb_cmds_fn = "cmds.gdb";
123     path($gdb_cmds_fn)->spew_utf8("r\nbt\nq\n");
124     my $gdb_prefix = "gdb --command=$gdb_cmds_fn";
125     $gdb_prefix = '';
126     do_system(
127         {
128             cmd => [
129 "$WIN32__DOUBLE_AMPERSAND__PROPER_HANDLING__NEEDED_PREFIX $gdb_prefix c:/foo/games/fortune.exe"
130             ]
131         }
132     );
133 }