File: TestSelfCompile.ml

package info (click to toggle)
oasis 0.4.4-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,432 kB
  • ctags: 2,908
  • sloc: ml: 31,357; makefile: 166; sh: 75; ansic: 48; awk: 26
file content (94 lines) | stat: -rw-r--r-- 4,329 bytes parent folder | download | duplicates (2)
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
94
(******************************************************************************)
(* OASIS: architecture for building OCaml libraries and applications          *)
(*                                                                            *)
(* Copyright (C) 2011-2013, Sylvain Le Gall                                   *)
(* Copyright (C) 2008-2011, OCamlCore SARL                                    *)
(*                                                                            *)
(* This library is free software; you can redistribute it and/or modify it    *)
(* under the terms of the GNU Lesser General Public License as published by   *)
(* the Free Software Foundation; either version 2.1 of the License, or (at    *)
(* your option) any later version, with the OCaml static compilation          *)
(* exception.                                                                 *)
(*                                                                            *)
(* This library is distributed in the hope that it will be useful, but        *)
(* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *)
(* or FITNESS FOR A PARTICULAR PURPOSE. See the file COPYING for more         *)
(* details.                                                                   *)
(*                                                                            *)
(* You should have received a copy of the GNU Lesser General Public License   *)
(* along with this library; if not, write to the Free Software Foundation,    *)
(* Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA              *)
(******************************************************************************)

(* Compile OASIS itself using the version under tests. *)

open OUnit2
open TestCommon

let tests = 
  "SelfCompile" >:
  (test_case ~length:OUnitTest.Long
    (fun test_ctxt ->
       let () = skip_long_test test_ctxt in
       let pwd = FileUtil.pwd () in
       let src_dir = Filename.dirname pwd in
       let in_src_dir fn = Filename.concat src_dir fn in
       let () = 
         skip_if
           (Sys.os_type <> "Unix" || not (Sys.file_exists (in_src_dir ".git")))
           "Only compile for particular dev configurations."
       in
       let tmpdir = bracket_tmpdir test_ctxt in
       (* List all files that should be copied. *)
       let is_ignored =
         let ignore_dot_git fn' =
           OASISString.starts_with ~what:(in_src_dir ".git") fn'
         in
         let rlst = ref [ignore_dot_git] in
         let chn = open_in (in_src_dir ".gitignore") in
         let () =
           try
             while true do
               let fn = in_src_dir (input_line chn) in
               let test fn' =
                 if Sys.file_exists fn && Sys.is_directory fn then
                   OASISString.starts_with ~what:fn fn'
                 else
                   fn = fn'
               in
               rlst := test :: !rlst
             done;
           with End_of_file ->
             ()
         in
           close_in chn;
           fun fn ->
             List.exists (fun test -> test fn) !rlst
       in
       let files =
         FileUtil.find FileUtil.Is_file src_dir (fun lst fn -> fn :: lst) []
       in
       (* Copy all files to a temporary directory. *)
       let () =
         List.iter
           (fun fn ->
              if not (is_ignored fn) then begin
                let target_fn = FilePath.reparent src_dir tmpdir fn in
                let dn = Filename.dirname target_fn in
                logf test_ctxt `Info "Copy %s -> %s." fn target_fn;
                if not (Sys.file_exists dn) then
                  FileUtil.mkdir ~parent:true dn;
                FileUtil.cp [fn] target_fn
              end)
           files
       in
         (* Regenerate setup.ml and try to compile. *)
         assert_oasis_cli ~ctxt:test_ctxt ~chdir:tmpdir ["setup"];
         assert_command ~ctxt:test_ctxt ~chdir:tmpdir
           "ocaml" ["setup.ml"; "-configure";
                    "--override"; "is_native";
                    string_of_bool (is_native test_ctxt);
                    "--override"; "native_dynlink";
                    string_of_bool (native_dynlink test_ctxt)];
         assert_command ~ctxt:test_ctxt ~chdir:tmpdir
           "ocaml" ["setup.ml"; "-build"]))