D - [HOWTO](MN001) Augmenting dmd with the ability to acess the environment
- Manfred Nowak (69/69) Mar 31 2004 Howto extend dmd 0.82 for accessing the environment under windows
Howto extend dmd 0.82 for accessing the environment under windows I assume, that you have a) a fresh install of dmd/dm into the root directory of your hard drive, and b) \dmd\bin as well as \dm\bin are in the front of your path Let's start: 1) Enter the directory \dmd\src\phobos: cd \dmd\src\phobos 2) Make a new subdirectory called usr: mkdir usr 4) Create the file "usr\environ.d" with your preferred editor having the on line content: public char[][ char[]] environ; 6) With your preferred editor edit the file win32.mak and 6a) add the characters "environ.obj" to the end of the "OBJS= " section. 6b) add the following two lines at the end of the file environ.obj : usr\environ.d $(DMD) -c $(DFLAGS) usr\environ.d 6c) change the the line "DMD=..\dmd" to "DMD=dmd" 6d) delete the characters " mmfile.obj" form the "OBJS= " section 7) touch the file "minit.obj": copy /b minit.obj+ 8) enter the directory \dmd\src\phobos\internal\gc: cd internal\gc 9) with your preferred editor edit the file win32.mak and 9a)change the line "DMD=..\..\..\dmd" to "DMD=dmd" 10)compile the gc library: make -f win32.mak 11)Go back to \dmd\src\phobos: cd ..\.. 12) With your preferred editor edit the file internal\dmain2.d and 12a) before the line containing "result = main(args);" add the seven lines: for( i= 0; env[ i] != null ; i++){ int len = strlen(env[i]); char[] s= env[i][0 .. len]; int j; for( j= 0; s[j] != '='; j++){}; environ[ s[0 .. j]]= s[ j+1 .. len]; } 12b) as the very first line add the line import usr.environ; 12c) change the line "extern (C) int main(int argc, char **argv)" to "extern (C) int main(int argc, char **argv, char **env)" 14) compile and build phobos.lib: make -f win32.mak phobos.lib 15) Enter the directory \dmd\lib: cd \dmd\lib 16) Rename old phobos.lib to phobos.org: ren phobos.lib phobos.org 17) Install new phobos.lib: move \dmd\src\phobos\phobos.lib . 18) Enter a directory somewhere in your file hierarchie and create the file test.d containing the four lines: import usr.environ; void main(){ printf("%.*s\n", environ["PATH"]); } 19) Compile it and run it: dmd test.d .\test 20) Compare the output with the output of the system command for output of the path: path Now you should be all done. Have fun. So long!
Mar 31 2004