digitalmars.D - build utility v1.0
- Derek (78/78) Feb 12 2005 The source code is now available for the build utility I've been working
- John Reimer (7/103) Feb 12 2005 Thanks, Derek!
- Derek (10/20) Feb 12 2005 Yeah, I guess so. I don't have linux and I just guessed at some stuff ba...
- zwang (3/99) Feb 12 2005 Nice! I'll give it a try today.
- Ben Hinkle (3/6) Feb 14 2005 Is there a list of pragmas that build.exe understands?
- Derek Parnell (7/15) Feb 14 2005 Sorry, I left out the doc files from the ZIP file. They are there now in
- Nick Sabalausky (5/85) Feb 14 2005 If it finds more than one file with a main() or WinMain(), is it smart
- Nick Sabalausky (7/118) Feb 14 2005 Nevermind that question. I just noticed that you give it the sourcefile ...
- Derek Parnell (10/15) Feb 14 2005 Fixed this. It only happened if there were other styled comments within ...
- Nick Sabalausky (5/23) Feb 14 2005 It also happened anytime there was a foreward-slash inside the /+ +/ pai...
- Derek Parnell (9/13) Feb 14 2005 No it can't do that, but its a good idea. I'll add that to the product
- Nick Sabalausky (6/19) Feb 14 2005 Awesome :). I have to say, I'm really impressed with this app. It's soo...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (39/73) Feb 20 2005 This directory should be a part of the zipfile itself...
- Derek (48/132) Feb 20 2005 Why? I didn't want to dictate to people what they should call their
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (22/65) Feb 20 2005 Well, when I use "unzip" it dumps a bunch of files in my root dir...
- Derek Parnell (9/18) Feb 20 2005 You're kidding! The tools that I use to unzip a file always ask me where
- Ben Hinkle (4/22) Feb 20 2005 By default Unix unzip utilities unzip to the current directory. That's w...
- John Reimer (11/102) Feb 20 2005 I really see no point in the way you've been criticising the source code...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (8/19) Feb 20 2005 Yeah, that was why I tried to port it to GDC and Darwin ?
- Derek Parnell (18/40) Feb 20 2005 Thanks for doing that. Does my ...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (13/26) Feb 20 2005 Just consider it a Swedish personality trait, not ignorance :-)
- Derek Parnell (12/17) Feb 20 2005 Can't you do this sort of thing in your code ...
- Manfred Hansen (5/100) Feb 26 2005 Hello,
- Derek (7/12) Feb 26 2005 Yes. It is now being hosted by the DSource project.
The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all. -- Derek Melbourne, Australia
Feb 12 2005
Derek wrote:The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all.Thanks, Derek! I guess the Linux version is left as a project for the reader, then? :-) I had made some changes to the previous version you sent me to get it running properly on Linux. Perhaps I just have to merge those in again. Looks good. - John R.
Feb 12 2005
On Sat, 12 Feb 2005 11:33:24 -0800, John Reimer wrote:Derek wrote:[snip]The source code is now available for the build utility I've been working on.Thanks, Derek! I guess the Linux version is left as a project for the reader, then? :-)Yeah, I guess so. I don't have linux and I just guessed at some stuff based on my ancient System V Unix days.I had made some changes to the previous version you sent me to get it running properly on Linux. Perhaps I just have to merge those in again.That would be nice. Just sent the changes to me and I'll merge them with my copy. (I really must get this to the dsource.org project). -- Derek Melbourne, Australia
Feb 12 2005
Nice! I'll give it a try today. Thank you, Derek! Derek wrote:The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all.
Feb 12 2005
"Derek" <derek psych.ward> wrote in message news:1bedfvi3tsc3c.1cy4hq7de8ni4$.dlg 40tude.net...The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zipIs there a list of pragmas that build.exe understands?
Feb 14 2005
On Mon, 14 Feb 2005 10:46:34 -0500, Ben Hinkle wrote:"Derek" <derek psych.ward> wrote in message news:1bedfvi3tsc3c.1cy4hq7de8ni4$.dlg 40tude.net...Sorry, I left out the doc files from the ZIP file. They are there now in HTML format. Unzip the download and click on INDEX.HTM to see the docs. -- Derek Melbourne, Australia 15/02/2005 1:02:34 PMThe source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zipIs there a list of pragmas that build.exe understands?
Feb 14 2005
If it finds more than one file with a main() or WinMain(), is it smart enough to determine that two separate apps need to be built, and that the two files with main() should not be linked together? "Derek" <derek psych.ward> wrote in message news:1bedfvi3tsc3c.1cy4hq7de8ni4$.dlg 40tude.net...The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all. -- Derek Melbourne, Australia
Feb 14 2005
Nevermind that question. I just noticed that you give it the sourcefile to start with, and it finds the sources through the import statements. I has assumed before that it just compiled all the sources in the directory. I did find one bug though. It hangs when it finds /+ +/ style comments in a source. "Nick Sabalausky" <z a.a> wrote in message news:cur049$1nsp$1 digitaldaemon.com...If it finds more than one file with a main() or WinMain(), is it smart enough to determine that two separate apps need to be built, and that the two files with main() should not be linked together? "Derek" <derek psych.ward> wrote in message news:1bedfvi3tsc3c.1cy4hq7de8ni4$.dlg 40tude.net...The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all. -- Derek Melbourne, Australia
Feb 14 2005
On Mon, 14 Feb 2005 15:37:09 -0500, Nick Sabalausky wrote:Nevermind that question. I just noticed that you give it the sourcefile to start with, and it finds the sources through the import statements. I has assumed before that it just compiled all the sources in the directory.No problems.I did find one bug though. It hangs when it finds /+ +/ style comments in a source.Fixed this. It only happened if there were other styled comments within the /+ +/ pairs. http://www.users.bigpond.com/ddparnell/build.zip The Docs are also include now. Click on INDEX.HTM to see them. -- Derek Melbourne, Australia 15/02/2005 1:05:46 PM
Feb 14 2005
"Derek Parnell" <derek psych.ward> wrote in message news:vykv3a1dxxj4.c7i7sb0tgwzf$.dlg 40tude.net...On Mon, 14 Feb 2005 15:37:09 -0500, Nick Sabalausky wrote:It also happened anytime there was a foreward-slash inside the /+ +/ pair. Maybe it thought the slash was the start of a comment? But in any case, the new version works fine for me too.Nevermind that question. I just noticed that you give it the sourcefile to start with, and it finds the sources through the import statements. I has assumed before that it just compiled all the sources in the directory.No problems.I did find one bug though. It hangs when it finds /+ +/ style comments in a source.Fixed this. It only happened if there were other styled comments within the /+ +/ pairs. http://www.users.bigpond.com/ddparnell/build.zip The Docs are also include now. Click on INDEX.HTM to see them. -- Derek Melbourne, Australia 15/02/2005 1:05:46 PM
Feb 14 2005
On Mon, 14 Feb 2005 15:02:26 -0500, Nick Sabalausky wrote:If it finds more than one file with a main() or WinMain(), is it smart enough to determine that two separate apps need to be built, and that the two files with main() should not be linked together?No it can't do that, but its a good idea. I'll add that to the product enhancement list. Also, I'll add a way to 'build' a directory so you don't really have to supply any file name on the command line if you don't need to. -- Derek Melbourne, Australia 15/02/2005 1:03:52 PM
Feb 14 2005
"Derek Parnell" <derek psych.ward> wrote in message news:1fqqbs4msc534$.10iv0xee627g4$.dlg 40tude.net...On Mon, 14 Feb 2005 15:02:26 -0500, Nick Sabalausky wrote:Awesome :). I have to say, I'm really impressed with this app. It's sooo nice to not have to bother with any type of makefile. Heheh, I've been changing build tools like crazy lately. Just in the last month alone I've moved from NMake -> SCons -> A-A-P -> build ;)If it finds more than one file with a main() or WinMain(), is it smart enough to determine that two separate apps need to be built, and that the two files with main() should not be linked together?No it can't do that, but its a good idea. I'll add that to the product enhancement list. Also, I'll add a way to 'build' a directory so you don't really have to supply any file name on the command line if you don't need to. -- Derek Melbourne, Australia 15/02/2005 1:03:52 PM
Feb 14 2005
Derek wrote:The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory.This directory should be a part of the zipfile itself... (and preferably versioned, something like "build-1.1" ?) If you want to learn about GNU and Linux packaging, there's: http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it.Since ".rsp" uses the Windows-centric .obj suffix, it didn't work... Note: the suffix for libraries on Linux and others (e.g like Darwin) is wrong. Where Windows uses "PHOBOS.LIB", it would be "libphobos.a"If you use the -V switch, you will get a lot of information about the decisions it is making for this run.Here's what I got, after proper patching: *** build v1.1 (build 140)*** Compiler installed in /opt/gdc/bin/ Configuration File installed in /opt/gdc/bin/ Active Version: 'build' Active Version: 'PPC' Active Version: 'darwin' Active Version: 'BigEndian' The config file was really "", but it replaced that with something from PATH environment ? Note: GDC does not use a dmd.conf config file...**** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications.1. The code uses a *lot* of "meaningless type aliases" (term from http://www.digitalmars.com/d/dstyle.html) Such as:alias char CharN; // utf8 (Narrow) alias CharN[] StringN; // utf8 (Narrow)This just makes it look Hungarian, and hard to follow... 2. It also uses a lot of extra semicolons (one per brace ?!?) This is just an error, and should probably even be flaggedif ( lAllExist == false) { throw new Exception ("Not all supplied files exist."); };foreach( StringN lFile; vCmdLineFiles) { new Source(GetFullPathname(lFile)); };There should *not* be a semicolon after the terminating brace of: if, foreach, and similar block statements... Single statements have semicolons, but blocks do not (and structs and classes don't either, in D at least)Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all.Patch to make it compile on Mac OS X is attached. It uses the same old copy-and-paste linux-to-darwin method that D seems to prefer for versioning ? <sigh> (where is that version(Posix) now that we need it...) Currently it doesn't work, since it wants to find and compile for instance "std/stdio.d" - but fails. It can probably be teached to ignore /opt/gdc/include/d --anders
Feb 20 2005
On Sun, 20 Feb 2005 21:17:04 +0100, Anders F Björklund wrote:Derek wrote:Why? I didn't want to dictate to people what they should call their directory on their system. As far as being a requirement for 'build', the directory name that the utility is in, is immaterial. So why force people to use a name that I choose. It isn't polite. However, it would have been a good idea to place the version number into the ZIP file name.The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory.This directory should be a part of the zipfile itself... (and preferably versioned, something like "build-1.1" ?)If you want to learn about GNU and Linux packaging, there's: http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/When and if I ever release something into the linux world, I'll consider reading this stuff. I don't do linux, simply because I haven't got it. I do Windows because that's what I've got. And I definitely have not got an Apple to work on, even though I'll gladly accept any donations of one ;-)Then get Windows ;-) I said that I only have Windows, so you other people will just have to deal with my lack of scope.To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it.Since ".rsp" uses the Windows-centric .obj suffix, it didn't work...Note: the suffix for libraries on Linux and others (e.g like Darwin) is wrong. Where Windows uses "PHOBOS.LIB", it would be "libphobos.a"That's nice. Thanks for the heads-up.And how would 'build' know that? Did you use the -CFPATH switch?If you use the -V switch, you will get a lot of information about the decisions it is making for this run.Here's what I got, after proper patching: *** build v1.1 (build 140)*** Compiler installed in /opt/gdc/bin/ Configuration File installed in /opt/gdc/bin/ Active Version: 'build' Active Version: 'PPC' Active Version: 'darwin' Active Version: 'BigEndian' The config file was really "", but it replaced that with something from PATH environment ?Note: GDC does not use a dmd.conf config file...And 'build' is not designed for GDC (yet). It is only supposed to work with the compiler tools from DigitalMars. Sorry if I mislead you.In your humble opinion. The reasons for doing this were to create some consistent naming, given the lack of an official string type, and as a bit of an experiment. So instead of having ... char, wchar, dchar, char[], wchar[] and dchar[] I said to myself, "what if utf32 were considered the norm?". So I came up with ... CharN, CharW, Char, StringN, StringW, and String. Sorry you don't like it, but I've given up trying to please everybody all the time.**** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications.1. The code uses a *lot* of "meaningless type aliases" (term from http://www.digitalmars.com/d/dstyle.html) Such as:alias char CharN; // utf8 (Narrow) alias CharN[] StringN; // utf8 (Narrow)This just makes it look Hungarian, and hard to follow...2. It also uses a lot of extra semicolons (one per brace ?!?) This is just an error, and should probably even be flaggedIt is not an *error* as the compiler did not complain, and the specifications do not call it an error either. It is a style of writing D code; one that you seem to somewhat dislike.The purpose of placing a semi-colon in such cases is to give a visual clue to the reader that nothing else follows in the same statement, and to give a mental 'break' for the reader. It has a similar purpose to the 'period' at the end of English sentences. It is particularly useful in the 'if' statement as it explicitly tells the reader that there is no 'else' clause. Upon seeing the semi-colon, one does a quick context shift to prepare for the next statement to read.if ( lAllExist == false) { throw new Exception ("Not all supplied files exist."); };Why? What harm does it do and/or what good is not having it?foreach( StringN lFile; vCmdLineFiles) { new Source(GetFullPathname(lFile)); };There should *not* be a semicolon after the terminating brace of: if, foreach, and similar block statements...Single statements have semicolons, but blocks do not (and structs and classes don't either, in D at least)Why? At best one can say that blocks do not require semi-colons. And BTW, one can have semi-colons at the end of structs and classes in D.Thank you. May I incorporate it in to my version?Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all.Patch to make it compile on Mac OS X is attached.It uses the same old copy-and-paste linux-to-darwin method that D seems to prefer for versioning ? <sigh> (where is that version(Posix) now that we need it...) Currently it doesn't work, since it wants to find and compile for instance "std/stdio.d" - but fails. It can probably be teached to ignore /opt/gdc/include/dYes it can, however if that is normal for GDC then when I get around to supporting GDC I can make this behaviour a default one. -- Derek Melbourne, Australia
Feb 20 2005
Derek wrote:Why? I didn't want to dictate to people what they should call their directory on their system. As far as being a requirement for 'build', the directory name that the utility is in, is immaterial. So why force people to use a name that I choose. It isn't polite.Well, when I use "unzip" it dumps a bunch of files in my root dir... And I don't like that :-) (but it's not really that big a deal to me)When and if I ever release something into the linux world, I'll consider reading this stuff. I don't do linux, simply because I haven't got it. I do Windows because that's what I've got. And I definitely have not got an Apple to work on, even though I'll gladly accept any donations of one ;-)You don't really have to own one yourself, just read up on SSH :-)Then get Windows ;-) I said that I only have Windows, so you other people will just have to deal with my lack of scope.Np, it was straightforward to just compile the .d source files.I hardcoded configpath to "", but it got filled out anyway ?The config file was really "", but it replaced that with something from PATH environment ?And how would 'build' know that? Did you use the -CFPATH switch?And 'build' is not designed for GDC (yet). It is only supposed to work with the compiler tools from DigitalMars. Sorry if I mislead you.Nah, I figured as much. Just thought you liked to know... I just added a version(DigitalMars) to ReadConfigFile.Naturally :-) (I'm using a few local aliases myself)This just makes it look Hungarian, and hard to follow...In your humble opinion.Fair enough. (it's not a real DMD compiler error. Yet.)It also uses a lot of extra semicolons (one per brace ?!?) This is just an error, and should probably even be flaggedIt is not an *error* as the compiler did not complain, and the specifications do not call it an error either.The purpose of placing a semi-colon in such cases is to give a visual clue to the reader that nothing else follows in the same statement, and to give a mental 'break' for the reader. It has a similar purpose to the 'period' at the end of English sentences. It is particularly useful in the 'if' statement as it explicitly tells the reader that there is no 'else' clause.Had never seen this before. And it also gives the compiler a "break" by inserting a no-op after the block, but that's easy enough to optimize...It's ugly :-) It's also not in the D specification: http://www.digitalmars.com/d/statement.html#block But I have a feeling debating this will just lead to a another Holy War, so I'll try to not mention it again... (But it's the weirdest Brace Style that I've encountered)There should *not* be a semicolon after the terminating brace of: if, foreach, and similar block statements...Why? What harm does it do and/or what good is not having it?At least at the time being... They might all become errors. Even if allowed at the moment, extra semis are still wrong.Single statements have semicolons, but blocks do not (and structs and classes don't either, in D at least)Why? At best one can say that blocks do not require semi-colons. And BTW, one can have semi-colons at the end of structs and classes in D.Sure, that was the meaning all along of posting it.Patch to make it compile on Mac OS X is attached.Thank you. May I incorporate it in to my version?Yes it can, however if that is normal for GDC then when I get around to supporting GDC I can make this behaviour a default one.It is, although the /opt/gdc part might vary... --anders
Feb 20 2005
On Sun, 20 Feb 2005 23:20:25 +0100, Anders F Björklund wrote:Derek wrote:You're kidding! The tools that I use to unzip a file always ask me where I'd like it to be unzipped to. And if the directory that I name doesn't exist, they silently create it for me. Very user-friendly. -- Derek Melbourne, Australia 21/02/2005 10:42:02 AMWhy? I didn't want to dictate to people what they should call their directory on their system. As far as being a requirement for 'build', the directory name that the utility is in, is immaterial. So why force people to use a name that I choose. It isn't polite.Well, when I use "unzip" it dumps a bunch of files in my root dir... And I don't like that :-) (but it's not really that big a deal to me)
Feb 20 2005
In article <i55xx7aue55v.5kg5ctpp4hlc$.dlg 40tude.net>, Derek Parnell says...On Sun, 20 Feb 2005 23:20:25 +0100, Anders F Björklund wrote:By default Unix unzip utilities unzip to the current directory. That's why when I'm on unix I always make a directory and cd into it before unzipping or use the -d flag to create a dir and unzip into that.Derek wrote:You're kidding! The tools that I use to unzip a file always ask me where I'd like it to be unzipped to. And if the directory that I name doesn't exist, they silently create it for me. Very user-friendly. -- Derek Melbourne, Australia 21/02/2005 10:42:02 AMWhy? I didn't want to dictate to people what they should call their directory on their system. As far as being a requirement for 'build', the directory name that the utility is in, is immaterial. So why force people to use a name that I choose. It isn't polite.Well, when I use "unzip" it dumps a bunch of files in my root dir... And I don't like that :-) (but it's not really that big a deal to me)
Feb 20 2005
I really see no point in the way you've been criticising the source code, Anders. The build tool is an open project. Derek contributed a hefty amount of work/time to get it out there for the rest of us to play with. If you don't like the style, change it to the way you like it for your own personal use. "build" is still a proof-of-concept, I think. It's an example of what a build tool for D can evolve into. If it gets on as a project on dsource.org where more than one person can contribute, perhaps that's the time to discuss coding style. But until then, it's probably not wise to discourage new contributions with such pettiness. On Sun, 20 Feb 2005 23:20:25 +0100, Anders F Björklund wrote:Derek wrote:Why? I didn't want to dictate to people what they should call their directory on their system. As far as being a requirement for 'build', the directory name that the utility is in, is immaterial. So why force people to use a name that I choose. It isn't polite.Well, when I use "unzip" it dumps a bunch of files in my root dir... And I don't like that :-) (but it's not really that big a deal to me)When and if I ever release something into the linux world, I'll consider reading this stuff. I don't do linux, simply because I haven't got it. I do Windows because that's what I've got. And I definitely have not got an Apple to work on, even though I'll gladly accept any donations of one ;-)You don't really have to own one yourself, just read up on SSH :-)Then get Windows ;-) I said that I only have Windows, so you other people will just have to deal with my lack of scope.Np, it was straightforward to just compile the .d source files.I hardcoded configpath to "", but it got filled out anyway ?The config file was really "", but it replaced that with something from PATH environment ?And how would 'build' know that? Did you use the -CFPATH switch?And 'build' is not designed for GDC (yet). It is only supposed to work with the compiler tools from DigitalMars. Sorry if I mislead you.Nah, I figured as much. Just thought you liked to know... I just added a version(DigitalMars) to ReadConfigFile.Naturally :-) (I'm using a few local aliases myself)This just makes it look Hungarian, and hard to follow...In your humble opinion.Fair enough. (it's not a real DMD compiler error. Yet.)It also uses a lot of extra semicolons (one per brace ?!?) This is just an error, and should probably even be flaggedIt is not an *error* as the compiler did not complain, and the specifications do not call it an error either.The purpose of placing a semi-colon in such cases is to give a visual clue to the reader that nothing else follows in the same statement, and to give a mental 'break' for the reader. It has a similar purpose to the 'period' at the end of English sentences. It is particularly useful in the 'if' statement as it explicitly tells the reader that there is no 'else' clause.Had never seen this before. And it also gives the compiler a "break" by inserting a no-op after the block, but that's easy enough to optimize...It's ugly :-) It's also not in the D specification: http://www.digitalmars.com/d/statement.html#block But I have a feeling debating this will just lead to a another Holy War, so I'll try to not mention it again... (But it's the weirdest Brace Style that I've encountered)There should *not* be a semicolon after the terminating brace of: if, foreach, and similar block statements...Why? What harm does it do and/or what good is not having it?At least at the time being... They might all become errors. Even if allowed at the moment, extra semis are still wrong.Single statements have semicolons, but blocks do not (and structs and classes don't either, in D at least)Why? At best one can say that blocks do not require semi-colons. And BTW, one can have semi-colons at the end of structs and classes in D.Sure, that was the meaning all along of posting it.Patch to make it compile on Mac OS X is attached.Thank you. May I incorporate it in to my version?Yes it can, however if that is normal for GDC then when I get around to supporting GDC I can make this behaviour a default one.It is, although the /opt/gdc part might vary... --anders
Feb 20 2005
John Reimer wrote:I really see no point in the way you've been criticising the source code, Anders. The build tool is an open project. Derek contributed a hefty amount of work/time to get it out there for the rest of us to play with.Sorry, it was all just meant as constructive criticism...If you don't like the style, change it to the way you like it for your own personal use. "build" is still a proof-of-concept, I think. It's an example of what a build tool for D can evolve into.Yeah, that was why I tried to port it to GDC and Darwin ?If it gets on as a project on dsource.org where more than one person can contribute, perhaps that's the time to discuss coding style. But until then, it's probably not wise to discourage new contributions with such pettiness.Too used to working on community projects, I suppose. http://c2.com/cgi/wiki?CollectiveCodeOwnership Hope that Derek wasn't too put off or discouraged... I just happen to think that how code looks is important. --anders
Feb 20 2005
On Mon, 21 Feb 2005 08:03:09 +0100, Anders F Björklund wrote:John Reimer wrote:It was, even though the tone might have been a bit strong for some.I really see no point in the way you've been criticising the source code, Anders. The build tool is an open project. Derek contributed a hefty amount of work/time to get it out there for the rest of us to play with.Sorry, it was all just meant as constructive criticism...Thanks for doing that. Does my ... version(darwin) version = Posix; version(linux) version = Posix; idea work for you?If you don't like the style, change it to the way you like it for your own personal use. "build" is still a proof-of-concept, I think. It's an example of what a build tool for D can evolve into.Yeah, that was why I tried to port it to GDC and Darwin ?I'm also used to working with project teams, both small and largish (60+ people).If it gets on as a project on dsource.org where more than one person can contribute, perhaps that's the time to discuss coding style. But until then, it's probably not wise to discourage new contributions with such pettiness.Too used to working on community projects, I suppose. http://c2.com/cgi/wiki?CollectiveCodeOwnershipHope that Derek wasn't too put off or discouraged...Not at all. I've already added your patches. I've removed all those instances of superfluous semi-colons and removed the 'redundant' aliases. I'm preparing to start this up as a DSOURCE.ORG project.I just happen to think that how code looks is important.And so do I, that's why I deliberately inserted all those semi-colons and aliases in the first place ;-) -- Derek Melbourne, Australia 21/02/2005 6:13:16 PM
Feb 20 2005
Derek Parnell wrote:Just consider it a Swedish personality trait, not ignorance :-) (English is not my native language, as with a lot of people here)Sorry, it was all just meant as constructive criticism...It was, even though the tone might have been a bit strong for some.version(darwin) version = Posix; version(linux) version = Posix; idea work for you?It's part of a bigger problem, and needs a more permanent change... It kinda works, just that a) it needs to be repeated in every single project and b) the code imports and uses std.c.linux.linux module (which needs to be changed into std.c.darwin.darwin, for instance) But it's a different discussion... (and Mac OS X is not a supported DMD platform, it's just a GDC one)Ok, hope I'm not "cramping your style" here or anything ? Maybe it is my code that needs adapting to local customs.Hope that Derek wasn't too put off or discouraged...Not at all. I've already added your patches. I've removed all those instances of superfluous semi-colons and removed the 'redundant' aliases.And so do I, that's why I deliberately inserted all those semi-colons and aliases in the first place ;-):-) --anders
Feb 20 2005
On Sun, 20 Feb 2005 21:17:04 +0100, Anders F Björklund wrote: [snip]Patch to make it compile on Mac OS X is attached. It uses the same old copy-and-paste linux-to-darwin method that D seems to prefer for versioning ? <sigh> (where is that version(Posix) now that we need it...)Can't you do this sort of thing in your code ... version(linux) version = Posix; version(darwin) version = Posix; version(Posix) { . . . } -- Derek Melbourne, Australia 21/02/2005 11:22:10 AM
Feb 20 2005
Hello, i can't find the build programm. Have you change the url? mfg Manfred Am Sun, 13 Feb 2005 01:21:56 +1100 schrieb Derek:The source code is now available for the build utility I've been working on. http://www.users.bigpond.com/ddparnell/build.zip This contains a number of source files, a Windows executable (build.exe), and some files to recompile the application. First, extract all the files from the zip into a single directory. To recompile the application, from the command line enter ... dmd build.rsp If you have the compiler in your path and the standard configuration file, this should work just fine. Otherwise you might need to tweak it. There are a number of source files in the form "*_bn.d". These are automatically maintained by build so don't edit them. These are automatically incremented build numbers for a module. To get build to maintain a build number file, insert into each module you need it for ... private import <modulename>_bn; Your code can then access the build number for the module like this ... writefln("Module Build Number %d", auto_build_number); To see the command line parameters and switches, just run build without anything else on the command line. You should get something like ... Path and Version : F:\Projects\build\build.exe v1.0(115) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui Forces a GUI application to be created. (Only needed if WinMain is not found in the source files.) -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) [...] All other options, objectfiles and libraries are passed to the compiler The idea of 'build' is to give it the top-level source code file for your application, and it will then work out all the dependencies and which files are need to be recompiled. Typically it is run from a command prompt like ... build myapp Which will then create myapp.exe (for Windows) based on the imports contained in the related sources. If it finds a function called either 'main' or 'WinMain' it will assume you want to create an executable. If it doesn't find this, it assumes you want to create a library. If you use the -V switch, you will get a lot of information about the decisions it is making for this run. **** NOTE **** This is only version 1.0, and thus will have mistakes in it and some missing functionality. Please let me know about anything that needs improvement. Eventually, I'll get this onto DSource.org as a project and we can then use SVN to manage the source modifications. Finally, this tool is useful to me, but that doesn't mean that you will find it useful for yourself. If you don't like it, then don't use it. I won't mind at all.
Feb 26 2005
On Sat, 26 Feb 2005 18:47:37 +0100, Manfred Hansen wrote:Hello, i can't find the build programm. Have you change the url?Yes. It is now being hosted by the DSource project. http://www.dsource.org/projects/build It is also at release level v1.5 now and appears fairly stable. -- Derek Melbourne, Australia
Feb 26 2005