Skip to content

Commit 3a74d24

Browse files
committed
fix #2618
1 parent 2f0e898 commit 3a74d24

File tree

13 files changed

+120
-33
lines changed

13 files changed

+120
-33
lines changed

source/dub/compilers/dmd.d

+16-10
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,13 @@ config /etc/dmd.conf
305305
string getTargetFileName(in BuildSettings settings, in BuildPlatform platform)
306306
const {
307307
import std.conv: text;
308-
assert(settings.targetName.length > 0, "No target name set.");
308+
309+
string targetName()
310+
{
311+
assert(settings.targetName.length > 0, "No target name set.");
312+
return settings.targetName.idup;
313+
}
314+
309315
final switch (settings.targetType) {
310316
case TargetType.autodetect:
311317
assert(false,
@@ -315,23 +321,23 @@ config /etc/dmd.conf
315321
case TargetType.sourceLibrary: return null;
316322
case TargetType.executable:
317323
if (platform.isWindows())
318-
return settings.targetName ~ ".exe";
319-
else return settings.targetName.idup;
324+
return targetName ~ ".exe";
325+
else return targetName;
320326
case TargetType.library:
321327
case TargetType.staticLibrary:
322328
if (platform.isWindows())
323-
return settings.targetName ~ ".lib";
324-
else return "lib" ~ settings.targetName ~ ".a";
329+
return targetName ~ ".lib";
330+
else return "lib" ~ targetName ~ ".a";
325331
case TargetType.dynamicLibrary:
326332
if (platform.isWindows())
327-
return settings.targetName ~ ".dll";
333+
return targetName ~ ".dll";
328334
else if (platform.platform.canFind("darwin"))
329-
return "lib" ~ settings.targetName ~ ".dylib";
330-
else return "lib" ~ settings.targetName ~ ".so";
335+
return "lib" ~ targetName ~ ".dylib";
336+
else return "lib" ~ targetName ~ ".so";
331337
case TargetType.object:
332338
if (platform.isWindows())
333-
return settings.targetName ~ ".obj";
334-
else return settings.targetName ~ ".o";
339+
return targetName ~ ".obj";
340+
else return targetName ~ ".o";
335341
}
336342
}
337343

source/dub/compilers/gdc.d

+20-10
Original file line numberDiff line numberDiff line change
@@ -160,28 +160,38 @@ class GDCCompiler : Compiler {
160160

161161
string getTargetFileName(in BuildSettings settings, in BuildPlatform platform)
162162
const {
163-
assert(settings.targetName.length > 0, "No target name set.");
163+
import std.conv: text;
164+
165+
string targetName()
166+
{
167+
assert(settings.targetName.length > 0, "No target name set.");
168+
return settings.targetName.idup;
169+
}
170+
164171
final switch (settings.targetType) {
165-
case TargetType.autodetect: assert(false, "Configurations must have a concrete target type.");
172+
case TargetType.autodetect:
173+
assert(false,
174+
text("Configurations must have a concrete target type, ", settings.targetName,
175+
" has ", settings.targetType));
166176
case TargetType.none: return null;
167177
case TargetType.sourceLibrary: return null;
168178
case TargetType.executable:
169179
if (platform.isWindows())
170-
return settings.targetName ~ ".exe";
171-
else return settings.targetName.idup;
180+
return targetName ~ ".exe";
181+
else return targetName;
172182
case TargetType.library:
173183
case TargetType.staticLibrary:
174-
return "lib" ~ settings.targetName ~ ".a";
184+
return "lib" ~ targetName ~ ".a";
175185
case TargetType.dynamicLibrary:
176186
if (platform.isWindows())
177-
return settings.targetName ~ ".dll";
187+
return targetName ~ ".dll";
178188
else if (platform.platform.canFind("darwin"))
179-
return "lib" ~ settings.targetName ~ ".dylib";
180-
else return "lib" ~ settings.targetName ~ ".so";
189+
return "lib" ~ targetName ~ ".dylib";
190+
else return "lib" ~ targetName ~ ".so";
181191
case TargetType.object:
182192
if (platform.isWindows())
183-
return settings.targetName ~ ".obj";
184-
else return settings.targetName ~ ".o";
193+
return targetName ~ ".obj";
194+
else return targetName ~ ".o";
185195
}
186196
}
187197

source/dub/compilers/ldc.d

+21-12
Original file line numberDiff line numberDiff line change
@@ -192,34 +192,43 @@ config /etc/ldc2.conf (x86_64-pc-linux-gnu)
192192

193193
string getTargetFileName(in BuildSettings settings, in BuildPlatform platform)
194194
const {
195-
assert(settings.targetName.length > 0, "No target name set.");
195+
import std.conv: text;
196+
197+
string targetName()
198+
{
199+
assert(settings.targetName.length > 0, "No target name set.");
200+
return settings.targetName.idup;
201+
}
196202

197203
const p = platform.platform;
198204
final switch (settings.targetType) {
199-
case TargetType.autodetect: assert(false, "Configurations must have a concrete target type.");
205+
case TargetType.autodetect:
206+
assert(false,
207+
text("Configurations must have a concrete target type, ", settings.targetName,
208+
" has ", settings.targetType));
200209
case TargetType.none: return null;
201210
case TargetType.sourceLibrary: return null;
202211
case TargetType.executable:
203212
if (p.canFind("windows"))
204-
return settings.targetName ~ ".exe";
213+
return targetName ~ ".exe";
205214
else if (p.canFind("wasm"))
206-
return settings.targetName ~ ".wasm";
207-
else return settings.targetName.idup;
215+
return targetName ~ ".wasm";
216+
else return targetName;
208217
case TargetType.library:
209218
case TargetType.staticLibrary:
210219
if (p.canFind("windows") && !p.canFind("mingw"))
211-
return settings.targetName ~ ".lib";
212-
else return "lib" ~ settings.targetName ~ ".a";
220+
return targetName ~ ".lib";
221+
else return "lib" ~ targetName ~ ".a";
213222
case TargetType.dynamicLibrary:
214223
if (p.canFind("windows"))
215-
return settings.targetName ~ ".dll";
224+
return targetName ~ ".dll";
216225
else if (p.canFind("darwin"))
217-
return "lib" ~ settings.targetName ~ ".dylib";
218-
else return "lib" ~ settings.targetName ~ ".so";
226+
return "lib" ~ targetName ~ ".dylib";
227+
else return "lib" ~ targetName ~ ".so";
219228
case TargetType.object:
220229
if (p.canFind("windows"))
221-
return settings.targetName ~ ".obj";
222-
else return settings.targetName ~ ".o";
230+
return targetName ~ ".obj";
231+
else return targetName ~ ".o";
223232
}
224233
}
225234

source/dub/generators/build.d

+5-1
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,11 @@ private NativePath getMainSourceFile(in Package prj)
708708

709709
private NativePath getTargetPath(const scope ref BuildSettings bs, const scope ref GeneratorSettings settings)
710710
{
711-
return NativePath(bs.targetPath) ~ settings.compiler.getTargetFileName(bs, settings.platform);
711+
auto targetFileName = settings.compiler.getTargetFileName(bs, settings.platform);
712+
713+
if (!targetFileName.length)
714+
return NativePath.init;
715+
return NativePath(bs.targetPath) ~ targetFileName;
712716
}
713717

714718
private string shrinkPath(NativePath path, NativePath base)

test/issue2618-targetType-none-run.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env bash
2+
3+
. $(dirname "${BASH_SOURCE[0]}")/common.sh
4+
5+
cd "${CURR_DIR}/issue2618-targetType-none-run"
6+
7+
set +o pipefail
8+
9+
$DUB run --config dependencies --force 2>&1 | grep -c -F "Target is a library. Skipping execution."

test/issue2618-targetType-none-run/.no_build

Whitespace-only changes.

test/issue2618-targetType-none-run/.no_run

Whitespace-only changes.

test/issue2618-targetType-none-run/.no_test

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
.dub
2+
docs.json
3+
__dummy.html
4+
docs/
5+
/projb
6+
projb.so
7+
projb.dylib
8+
projb.dll
9+
projb.a
10+
projb.lib
11+
projb-test-*
12+
*.exe
13+
*.pdb
14+
*.o
15+
*.obj
16+
*.lst
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"name": "b"
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module projb;
2+
import std.stdio;
3+
4+
int getDependency()
5+
{
6+
writeln("Edit source/app.d to start your project.");
7+
return 10;
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"dependencies": {
3+
"b": {"path": "b"}
4+
},
5+
"configurations": [
6+
{
7+
"name": "main",
8+
"targetType": "staticLibrary"
9+
},
10+
{
11+
"name": "dependencies",
12+
"targetType":"none"
13+
}
14+
],
15+
"name": "issue2618"
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import std.stdio;
2+
3+
void main()
4+
{
5+
writeln("Edit source/app.d to start your project.");
6+
}

0 commit comments

Comments
 (0)