blob: 86992da76b199aa7c606ddc292b1261095351f71 [file] [log] [blame]
Argyrios Kyrtzidis69325d52011-07-09 20:00:58 +00001/* c-arcmt-test.c */
2
3#include "clang-c/ARCMigrate.h"
4#include <stdlib.h>
5#include <stdio.h>
6#include <string.h>
7
8static int print_remappings(const char *path) {
9 CMTRemap remap;
10 unsigned i, N;
11 CXString origFname;
12 CXString transFname;
13
14 remap = arcmt_getRemappings(path);
15 if (!remap)
16 return 1;
17
18 N = arcmt_remap_getNumFiles(remap);
19 for (i = 0; i != N; ++i) {
20 origFname = arcmt_remap_getOriginalFile(remap, i);
21 transFname = arcmt_remap_getTransformedFile(remap, i);
22
23 fprintf(stdout, "%s\n", clang_getCString(origFname));
24 fprintf(stdout, "%s\n", clang_getCString(transFname));
25
26 clang_disposeString(origFname);
27 clang_disposeString(transFname);
28 }
29
30 arcmt_remap_dispose(remap);
31 return 0;
32}
33
34/******************************************************************************/
35/* Command line processing. */
36/******************************************************************************/
37
38static void print_usage(void) {
39 fprintf(stderr,
40 "usage: c-arcmt-test -arcmt-migrate-directory <path>\n\n\n");
41}
42
43/***/
44
45int carcmttest_main(int argc, const char **argv) {
46 clang_enableStackTraces();
47 if (argc == 3 && strncmp(argv[1], "-arcmt-migrate-directory", 24) == 0)
48 return print_remappings(argv[2]);
49
50 print_usage();
51 return 1;
52}
53
54/***/
55
56/* We intentionally run in a separate thread to ensure we at least minimal
57 * testing of a multithreaded environment (for example, having a reduced stack
58 * size). */
59
60typedef struct thread_info {
61 int argc;
62 const char **argv;
63 int result;
64} thread_info;
65void thread_runner(void *client_data_v) {
66 thread_info *client_data = client_data_v;
67 client_data->result = carcmttest_main(client_data->argc, client_data->argv);
68}
69
70int main(int argc, const char **argv) {
71 thread_info client_data;
72
73 setenv("LIBCLANG_LOGGING", "1", /*overwrite=*/0);
74
75 if (getenv("CINDEXTEST_NOTHREADS"))
76 return carcmttest_main(argc, argv);
77
78 client_data.argc = argc;
79 client_data.argv = argv;
80 clang_executeOnThread(thread_runner, &client_data, 0);
81 return client_data.result;
82}