Jump to page: 1 2
Thread overview
rdmd problem
Apr 01, 2019
Comrad
Apr 01, 2019
Andre Pany
Apr 01, 2019
Seb
Apr 01, 2019
Seb
Apr 01, 2019
Andre Pany
Apr 05, 2019
Comrad
Apr 05, 2019
Comrad
Apr 05, 2019
Andre Pany
Apr 05, 2019
Seb
Apr 01, 2019
Jonathan Marler
April 01, 2019
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
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
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
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
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
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
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
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
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
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
« First   ‹ Prev
1 2