| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <sstream> | 5 #include <sstream> |
| 6 | 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "tools/gn/ninja_binary_target_writer.h" | 8 #include "tools/gn/ninja_binary_target_writer.h" |
| 9 #include "tools/gn/test_with_scope.h" | 9 #include "tools/gn/test_with_scope.h" |
| 10 | 10 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 target.sources().push_back(SourceFile("//foo/input3.o")); | 22 target.sources().push_back(SourceFile("//foo/input3.o")); |
| 23 target.sources().push_back(SourceFile("//foo/input4.obj")); | 23 target.sources().push_back(SourceFile("//foo/input4.obj")); |
| 24 target.OnResolved(); | 24 target.OnResolved(); |
| 25 | 25 |
| 26 // Source set itself. | 26 // Source set itself. |
| 27 { | 27 { |
| 28 std::ostringstream out; | 28 std::ostringstream out; |
| 29 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); | 29 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); |
| 30 writer.Run(); | 30 writer.Run(); |
| 31 | 31 |
| 32 // TODO(brettw) I think we'll need to worry about backslashes here | |
| 33 // depending if we're on actual Windows or Linux pretending to be Windows. | |
| 34 const char expected_win[] = | 32 const char expected_win[] = |
| 35 "defines =\n" | 33 "defines =\n" |
| 36 "includes =\n" | 34 "includes =\n" |
| 37 "cflags =\n" | 35 "cflags =\n" |
| 38 "cflags_c =\n" | 36 "cflags_c =\n" |
| 39 "cflags_cc =\n" | 37 "cflags_cc =\n" |
| 40 "cflags_objc =\n" | 38 "cflags_objc =\n" |
| 41 "cflags_objcc =\n" | 39 "cflags_objcc =\n" |
| 42 "target_name = bar\n" | 40 "target_name = bar\n" |
| 43 "target_out_dir = obj/foo\n" | 41 "target_out_dir = obj/foo\n" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 59 Target shlib_target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); | 57 Target shlib_target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); |
| 60 shlib_target.set_output_type(Target::SHARED_LIBRARY); | 58 shlib_target.set_output_type(Target::SHARED_LIBRARY); |
| 61 shlib_target.deps().push_back(LabelTargetPair(&target)); | 59 shlib_target.deps().push_back(LabelTargetPair(&target)); |
| 62 shlib_target.OnResolved(); | 60 shlib_target.OnResolved(); |
| 63 | 61 |
| 64 { | 62 { |
| 65 std::ostringstream out; | 63 std::ostringstream out; |
| 66 NinjaBinaryTargetWriter writer(&shlib_target, setup.toolchain(), out); | 64 NinjaBinaryTargetWriter writer(&shlib_target, setup.toolchain(), out); |
| 67 writer.Run(); | 65 writer.Run(); |
| 68 | 66 |
| 69 // TODO(brettw) I think we'll need to worry about backslashes here | |
| 70 // depending if we're on actual Windows or Linux pretending to be Windows. | |
| 71 const char expected_win[] = | 67 const char expected_win[] = |
| 72 "defines =\n" | 68 "defines =\n" |
| 73 "includes =\n" | 69 "includes =\n" |
| 74 "cflags =\n" | 70 "cflags =\n" |
| 75 "cflags_c =\n" | 71 "cflags_c =\n" |
| 76 "cflags_cc =\n" | 72 "cflags_cc =\n" |
| 77 "cflags_objc =\n" | 73 "cflags_objc =\n" |
| 78 "cflags_objcc =\n" | 74 "cflags_objcc =\n" |
| 79 "target_name = shlib\n" | 75 "target_name = shlib\n" |
| 80 "target_out_dir = obj/foo\n" | 76 "target_out_dir = obj/foo\n" |
| 81 "root_out_dir = \n" | 77 "root_out_dir = \n" |
| 82 "\n" | 78 "\n" |
| 83 "\n" | 79 "\n" |
| 84 "manifests = obj/foo/shlib.intermediate.manifest\n" | 80 "manifests = obj/foo/shlib.intermediate.manifest\n" |
| 85 "ldflags = /MANIFEST /ManifestFile:obj/foo/shlib.intermediate." | 81 "ldflags = /MANIFEST /ManifestFile:obj/foo/shlib.intermediate." |
| 86 "manifest\n" | 82 "manifest\n" |
| 87 "libs =\n" | 83 "libs =\n" |
| 88 // Ordering of the obj files here is arbitrary. Currently they're put | 84 // Ordering of the obj files here should come out in the order |
| 89 // in a set and come out sorted. | 85 // specified, with the target's first, followed by the source set's, in |
| 90 "build shlib.dll shlib.dll.lib: solink ../../foo/input3.o " | 86 // order. |
| 91 "../../foo/input4.obj obj/foo/bar.input1.obj " | 87 "build shlib.dll shlib.dll.lib: solink obj/foo/bar.input1.obj " |
| 92 "obj/foo/bar.input2.obj\n" | 88 "obj/foo/bar.input2.obj ../../foo/input3.o " |
| 89 "../../foo/input4.obj\n" |
| 93 " soname = shlib.dll\n" | 90 " soname = shlib.dll\n" |
| 94 " lib = shlib.dll\n" | 91 " lib = shlib.dll\n" |
| 95 " dll = shlib.dll\n" | 92 " dll = shlib.dll\n" |
| 96 " implibflag = /IMPLIB:shlib.dll.lib\n\n"; | 93 " implibflag = /IMPLIB:shlib.dll.lib\n\n"; |
| 97 std::string out_str = out.str(); | 94 std::string out_str = out.str(); |
| 98 #if defined(OS_WIN) | 95 #if defined(OS_WIN) |
| 99 std::replace(out_str.begin(), out_str.end(), '\\', '/'); | 96 std::replace(out_str.begin(), out_str.end(), '\\', '/'); |
| 100 #endif | 97 #endif |
| 101 EXPECT_EQ(expected_win, out_str); | 98 EXPECT_EQ(expected_win, out_str); |
| 102 } | 99 } |
| 103 | 100 |
| 104 // A static library that depends on the source set (should not link it). | 101 // A static library that depends on the source set (should not link it). |
| 105 Target stlib_target(setup.settings(), Label(SourceDir("//foo/"), "stlib")); | 102 Target stlib_target(setup.settings(), Label(SourceDir("//foo/"), "stlib")); |
| 106 stlib_target.set_output_type(Target::STATIC_LIBRARY); | 103 stlib_target.set_output_type(Target::STATIC_LIBRARY); |
| 107 stlib_target.deps().push_back(LabelTargetPair(&target)); | 104 stlib_target.deps().push_back(LabelTargetPair(&target)); |
| 108 stlib_target.OnResolved(); | 105 stlib_target.OnResolved(); |
| 109 | 106 |
| 110 { | 107 { |
| 111 std::ostringstream out; | 108 std::ostringstream out; |
| 112 NinjaBinaryTargetWriter writer(&stlib_target, setup.toolchain(), out); | 109 NinjaBinaryTargetWriter writer(&stlib_target, setup.toolchain(), out); |
| 113 writer.Run(); | 110 writer.Run(); |
| 114 | 111 |
| 115 // TODO(brettw) I think we'll need to worry about backslashes here | |
| 116 // depending if we're on actual Windows or Linux pretending to be Windows. | |
| 117 const char expected_win[] = | 112 const char expected_win[] = |
| 118 "defines =\n" | 113 "defines =\n" |
| 119 "includes =\n" | 114 "includes =\n" |
| 120 "cflags =\n" | 115 "cflags =\n" |
| 121 "cflags_c =\n" | 116 "cflags_c =\n" |
| 122 "cflags_cc =\n" | 117 "cflags_cc =\n" |
| 123 "cflags_objc =\n" | 118 "cflags_objc =\n" |
| 124 "cflags_objcc =\n" | 119 "cflags_objcc =\n" |
| 125 "target_name = stlib\n" | 120 "target_name = stlib\n" |
| 126 "target_out_dir = obj/foo\n" | 121 "target_out_dir = obj/foo\n" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 151 target.set_output_type(Target::SHARED_LIBRARY); | 146 target.set_output_type(Target::SHARED_LIBRARY); |
| 152 target.set_output_extension(std::string("so.6")); | 147 target.set_output_extension(std::string("so.6")); |
| 153 target.sources().push_back(SourceFile("//foo/input1.cc")); | 148 target.sources().push_back(SourceFile("//foo/input1.cc")); |
| 154 target.sources().push_back(SourceFile("//foo/input2.cc")); | 149 target.sources().push_back(SourceFile("//foo/input2.cc")); |
| 155 target.OnResolved(); | 150 target.OnResolved(); |
| 156 | 151 |
| 157 std::ostringstream out; | 152 std::ostringstream out; |
| 158 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); | 153 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); |
| 159 writer.Run(); | 154 writer.Run(); |
| 160 | 155 |
| 161 // TODO(brettw) I think we'll need to worry about backslashes here | |
| 162 // depending if we're on actual Windows or Linux pretending to be Windows. | |
| 163 const char expected[] = | 156 const char expected[] = |
| 164 "defines =\n" | 157 "defines =\n" |
| 165 "includes =\n" | 158 "includes =\n" |
| 166 "cflags =\n" | 159 "cflags =\n" |
| 167 "cflags_c =\n" | 160 "cflags_c =\n" |
| 168 "cflags_cc =\n" | 161 "cflags_cc =\n" |
| 169 "cflags_objc =\n" | 162 "cflags_objc =\n" |
| 170 "cflags_objcc =\n" | 163 "cflags_objcc =\n" |
| 171 "target_name = shlib\n" | 164 "target_name = shlib\n" |
| 172 "target_out_dir = obj/foo\n" | 165 "target_out_dir = obj/foo\n" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 200 Target target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); | 193 Target target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); |
| 201 target.set_output_type(Target::SHARED_LIBRARY); | 194 target.set_output_type(Target::SHARED_LIBRARY); |
| 202 target.set_output_extension(std::string()); | 195 target.set_output_extension(std::string()); |
| 203 target.sources().push_back(SourceFile("//foo/input1.cc")); | 196 target.sources().push_back(SourceFile("//foo/input1.cc")); |
| 204 target.sources().push_back(SourceFile("//foo/input2.cc")); | 197 target.sources().push_back(SourceFile("//foo/input2.cc")); |
| 205 | 198 |
| 206 std::ostringstream out; | 199 std::ostringstream out; |
| 207 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); | 200 NinjaBinaryTargetWriter writer(&target, setup.toolchain(), out); |
| 208 writer.Run(); | 201 writer.Run(); |
| 209 | 202 |
| 210 // TODO(brettw) I think we'll need to worry about backslashes here | |
| 211 // depending if we're on actual Windows or Linux pretending to be Windows. | |
| 212 const char expected[] = | 203 const char expected[] = |
| 213 "defines =\n" | 204 "defines =\n" |
| 214 "includes =\n" | 205 "includes =\n" |
| 215 "cflags =\n" | 206 "cflags =\n" |
| 216 "cflags_c =\n" | 207 "cflags_c =\n" |
| 217 "cflags_cc =\n" | 208 "cflags_cc =\n" |
| 218 "cflags_objc =\n" | 209 "cflags_objc =\n" |
| 219 "cflags_objcc =\n" | 210 "cflags_objcc =\n" |
| 220 "target_name = shlib\n" | 211 "target_name = shlib\n" |
| 221 "target_out_dir = obj/foo\n" | 212 "target_out_dir = obj/foo\n" |
| 222 "root_out_dir = \n" | 213 "root_out_dir = \n" |
| 223 "\n" | 214 "\n" |
| 224 "build obj/foo/shlib.input1.o: cxx ../../foo/input1.cc\n" | 215 "build obj/foo/shlib.input1.o: cxx ../../foo/input1.cc\n" |
| 225 "build obj/foo/shlib.input2.o: cxx ../../foo/input2.cc\n" | 216 "build obj/foo/shlib.input2.o: cxx ../../foo/input2.cc\n" |
| 226 "\n" | 217 "\n" |
| 227 "ldflags =\n" | 218 "ldflags =\n" |
| 228 "libs =\n" | 219 "libs =\n" |
| 229 "build libshlib.so: solink obj/foo/shlib.input1.o " | 220 "build libshlib.so: solink obj/foo/shlib.input1.o " |
| 230 "obj/foo/shlib.input2.o\n" | 221 "obj/foo/shlib.input2.o\n" |
| 231 " soname = libshlib.so\n" | 222 " soname = libshlib.so\n" |
| 232 " lib = libshlib.so\n" | 223 " lib = libshlib.so\n" |
| 233 "\n"; | 224 "\n"; |
| 234 | 225 |
| 235 std::string out_str = out.str(); | 226 std::string out_str = out.str(); |
| 236 #if defined(OS_WIN) | 227 #if defined(OS_WIN) |
| 237 std::replace(out_str.begin(), out_str.end(), '\\', '/'); | 228 std::replace(out_str.begin(), out_str.end(), '\\', '/'); |
| 238 #endif | 229 #endif |
| 239 EXPECT_EQ(expected, out_str); | 230 EXPECT_EQ(expected, out_str); |
| 240 } | 231 } |
| OLD | NEW |