Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
April 01, 2019 rdmd problem | ||||
---|---|---|---|---|
| ||||
I have a strange problem with rdmd: > cat test.d #!/usr/bin/env rdmd -version=test import std.stdio; void main() { writeln("Hello, world with automated script running!"); } -------------------- This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options. > dmd --version DMD64 D Compiler v2.085.0 Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright > lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty > gcc --version gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Comrad | On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote: > I have a strange problem with rdmd: >> cat test.d > #!/usr/bin/env rdmd -version=test > import std.stdio; > void main() > { > writeln("Hello, world with automated script running!"); > } > > -------------------- > This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options. > >> dmd --version > DMD64 D Compiler v2.085.0 > Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright > >> lsb_release -a > No LSB modules are available. > Distributor ID: Ubuntu > Description: Ubuntu 14.04.5 LTS > Release: 14.04 > Codename: trusty > >> gcc --version > gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I am not sure wheter compiler arguments works at the shebang line. If it works there might be the issue, that the file is passed first to rdmd and then the compiler argument. Arguments after the file name are handled as application arguments and passed to the application. What definitely works is using dub and single package file https://dub.pm/advanced_usage You can define the versions in the json/sdl section. Kind regards Andre |
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Comrad | On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote: > I have a strange problem with rdmd: >> cat test.d > #!/usr/bin/env rdmd -version=test > import std.stdio; > void main() > { > writeln("Hello, world with automated script running!"); > } > > -------------------- > This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options. > >> dmd --version > DMD64 D Compiler v2.085.0 > Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright > >> lsb_release -a > No LSB modules are available. > Distributor ID: Ubuntu > Description: Ubuntu 14.04.5 LTS > Release: 14.04 > Codename: trusty > >> gcc --version > gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Shebang only supports one argument on your OS. See e.g. https://unix.stackexchange.com/questions/63979/shebang-line-with-usr-bin-env-command-argument-fails-on-linux Please use the "Learn" forum the next time. |
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Comrad | On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote: > I have a strange problem with rdmd: >> cat test.d > #!/usr/bin/env rdmd -version=test > import std.stdio; > void main() > { > writeln("Hello, world with automated script running!"); > } > > -------------------- > This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options. > >> dmd --version > DMD64 D Compiler v2.085.0 > Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright > >> lsb_release -a > No LSB modules are available. > Distributor ID: Ubuntu > Description: Ubuntu 14.04.5 LTS > Release: 14.04 > Codename: trusty > >> gcc --version > gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I am not sure wheter compiler arguments works at the shebang line. If it works there might be the issue, that the file is passed first to rdmd and then the compiler argument. Arguments after the file name are handled as application arguments and passed to the application. What definitely works is using dub and single package file https://dub.pm/advanced_usage You can define the versions in the json/sdl section. Kind regards Andre |
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Seb | On Monday, 1 April 2019 at 11:23:23 UTC, Seb wrote:
> On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote:
>> [...]
>
> Shebang only supports one argument on your OS.
> See e.g. https://unix.stackexchange.com/questions/63979/shebang-line-with-usr-bin-env-command-argument-fails-on-linux
>
> Please use the "Learn" forum the next time.
To extend on this: as this is a well-known limitation, rdmd has the --shebang switch that can be used to indicate to rdmd to split the arguments itself.
#!/usr/bin/rdmd --shebang -preview=dip25
|
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Comrad | On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote: > I have a strange problem with rdmd: >> cat test.d > #!/usr/bin/env rdmd -version=test > import std.stdio; > void main() > { > writeln("Hello, world with automated script running!"); > } > > -------------------- > This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options. > >> dmd --version > DMD64 D Compiler v2.085.0 > Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright > >> lsb_release -a > No LSB modules are available. > Distributor ID: Ubuntu > Description: Ubuntu 14.04.5 LTS > Release: 14.04 > Codename: trusty > >> gcc --version > gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. When I rewrote rdmd I read that some OS's don't support more than one argument on the shebang line, so I added support for "Source Compiler Directives". #!/usr/bin/env rund //!version test import std.stdio; void main() { writeln("Hello, world with automated script running!"); } If you use rdmd quite a bit, you might want to consider switching to rund: https://github.com/dragon-lang/rund It runs about twice as fast because it only needs to run the compiler once instead of twice like rdmd does. I also fixed a fair number of bugs with rdmd when I rewrote it. And if you find any issues with it, please let me know and I'll quickly make sure to get them fixed. |
April 01, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | On 4/1/19 7:23 AM, Andre Pany wrote: > I am not sure wheter compiler arguments works at the shebang line. Yah, that's the problem. I added the option --shebang (https://dlang.org/rdmd.html) for that reason, OP can you please try that? |
April 05, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On Monday, 1 April 2019 at 18:27:41 UTC, Andrei Alexandrescu wrote: > On 4/1/19 7:23 AM, Andre Pany wrote: >> I am not sure wheter compiler arguments works at the shebang line. > > Yah, that's the problem. I added the option --shebang (https://dlang.org/rdmd.html) for that reason, OP can you please try that? So... I was able finally to make it work: > cat test.d #!/usr/bin/rdmd --shebang -version=test -O import std.stdio; void main() { writeln("Hello, world with automated script running!"); } ------------------------------------ This does work. But!!! The documentation have to be changed, because the recommended way to start the script is through `env` and it doesn't help at all. Maybe I'm stupid, but it took for me some time to understand such an obvious (like it appeared to be later) thing. |
April 05, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | On Monday, 1 April 2019 at 11:23:43 UTC, Andre Pany wrote:
> On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote:
>> I have a strange problem with rdmd:
>>> cat test.d
>> #!/usr/bin/env rdmd -version=test
>> import std.stdio;
>> void main()
>> {
>> writeln("Hello, world with automated script running!");
>> }
>>
>> --------------------
>> This hangs, but if I remove compile options it does work. Overall it doesn't work with any compiler options.
>>
>>> dmd --version
>> DMD64 D Compiler v2.085.0
>> Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright
>>
>>> lsb_release -a
>> No LSB modules are available.
>> Distributor ID: Ubuntu
>> Description: Ubuntu 14.04.5 LTS
>> Release: 14.04
>> Codename: trusty
>>
>>> gcc --version
>> gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4
>> Copyright (C) 2015 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions. There is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> I am not sure wheter compiler arguments works at the shebang line. If it works there might be the issue, that the file is passed first to rdmd and then the compiler argument. Arguments after the file name are handled as application arguments and passed to the application.
>
> What definitely works is using dub and single package file
> https://dub.pm/advanced_usage
> You can define the versions in the json/sdl section.
>
> Kind regards
> Andre
Sorry,
the documentation doesn't allow me to understand easily, how to use it without additional pain. The link you gave doesn't describe a clear method for those, who never used dub before.
Anyway... I was able to solve my problem in a convenient for me way (using #!/usr/bin/rdmd --shebang -version=test -O)
Thank you anyhow!
|
April 05, 2019 Re: rdmd problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Comrad | On Friday, 5 April 2019 at 12:27:25 UTC, Comrad wrote:
> On Monday, 1 April 2019 at 11:23:43 UTC, Andre Pany wrote:
>> On Monday, 1 April 2019 at 11:10:06 UTC, Comrad wrote:
>>> [...]
>>
>> I am not sure wheter compiler arguments works at the shebang line. If it works there might be the issue, that the file is passed first to rdmd and then the compiler argument. Arguments after the file name are handled as application arguments and passed to the application.
>>
>> What definitely works is using dub and single package file
>> https://dub.pm/advanced_usage
>> You can define the versions in the json/sdl section.
>>
>> Kind regards
>> Andre
>
> Sorry,
> the documentation doesn't allow me to understand easily, how to use it without additional pain. The link you gave doesn't describe a clear method for those, who never used dub before.
> Anyway... I was able to solve my problem in a convenient for me way (using #!/usr/bin/rdmd --shebang -version=test -O)
>
> Thank you anyhow!
No problem:)
Create a file sample.d with following content
#!/usr/bin/env dub
/+ dub.sdl:
name "sample"
versions "test"
+/
void main() {
import std.stdio : writeln;
writeln("Hello, World!");
}
You can start it with "dub sample" or if you add the executable flag with "./sample.d".
With recent dub version you can name the file even without the .d extension and just start it with "./sample".
Kind regards
Andre
|
Copyright © 1999-2021 by the D Language Foundation