1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
|
'-----------------------------------
Option Explicit
Dim strKeyroot
Dim strCLKeyroot
Dim strKeyname
Dim KeySet
Dim CLKeySet
Dim MaxVersion
Dim MaxCLVersion
Dim strGFDCroot
Dim strGFDCname
Dim ENV
Dim package
Dim VFPATH
Dim VFENV
Dim FC
Dim CLPATH
Dim CLENV
Dim CC
Dim WSHShell
Dim objFSO ' FileSystemObject
Dim objFile ' ファイル書き込み用
Dim strDCLValue
Dim strVFValue
Dim strCLValue
Dim Keyname
Dim Ret
FC = "ifort.exe /nologo /MD "
VFENV = "ifortvars.bat"
CC = "cl.exe /nologo /MD /DHAVE_GTK_H /DHAVE_GDK_PIXBUF_H /DWINDOWS"
CLENV = "vcvars32.bat"
'Set Registry Key Root
Set KeySet = CreateObject("Scripting.Dictionary")
If Is64() then
strKeyroot = "SoftWare\Wow6432Node\Intel\Compilers\Fortran"
strCLKeyroot = "Software\Wow6432Node\Microsoft\VisualStudio"
strGFDCroot = "Software\Wow6432Node\GFD_Dennou_Club\Fortran"
Else
strKeyroot = "SoftWare\Intel\Compilers\Fortran"
strCLKeyroot = "Software\Microsoft\VisualStudio"
strGFDCroot = "Software\GFD_Dennou_Club\Fortran"
End If
KeySet = GetRegValueArray(strKeyroot)
CLKeySet = GetRegValueArray(strCLKeyroot)
MaxVersion = GetMaxVersion(KeySet)
MaxCLVersion = GetMaxVersion(CLKeySet)
strKeyroot = strKeyroot & "\" & MaxVersion
strCLKeyroot = strCLKeyroot & "\" & MaxCLVersion & "\Setup\VC"
' 以下のものを読み出してSETENV.BAT に書き出していくと同時に
' 環境変数に設定する?
strDCLValue = Array("DLIB", "DWBIN", "GL:DSPATH")
strVFValue = Array("FC", "VFENV", "VFPATH")
strCLValue = Array("CC", "CLENV", "CLPATH")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("config.bat", 2, True)
For Each Keyname In strDCLValue
Ret = GetRegValue(strGFDCroot,Keyname)
If Ret = "" Then
Select Case KeyName
Case "DLIB"
Ret="C:\dcl-fortran\lib"
Case "GL:DSPATH"
Ret="C:\dcl-fortran\lib"
Case "DWBIN"
Ret="C:\dcl-fortran\bin"
End Select
End If
objFile.Write("set " & Keyname & "=" & Ret & vbCrLf)
Next
'今のバージョンではそうなっていないが、ifort が実行できないときだけ
'設定するようにしたい。
VFPATH = GetRegValue(strKeyroot,"ProductDir")
CLPATH = GetRegValue(strCLKeyroot,"ProductDir")
objFile.Write("set " & "FC" & "=" & FC & vbCrLf)
objFile.Write("set " & "CC" & "=" & CC & vbCrLf)
objFile.Write("set " & "PATH" & "=" & "%PATH%;%DWBIN%" & vbCrLf)
objFile.Write("@IF ""%1""==""MACRO"" goto macro" & vbCrLf)
objFile.Write("@goto comline"& vbCrLf)
objFile.Write(":macro"& vbCrLf)
objFile.Write("call """ & VFPATH & "\BIN\" & VFENV & _
"""" & " intel64" & vbCrLf)
' """" & " ia32" & vbCrLf)
objFile.Write("call """ & CLPATH & "\BIN\" & CLENV & _
"""" & vbCrLf)
objFile.Write("goto end"& vbCrLf)
objFile.Write(":comline"& vbCrLf)
objFile.Write("%comspec% /k """ & VFPATH & "\BIN\" & _
VFENV & """" & " intel64" & vbCrLf)
' VFENV & """" & " ia32" & vbCrLf)
objFile.Write("call """ & CLPATH & "\BIN\" & CLENV & _
"""" & vbCrLf)
objFile.Write(":end" & vbCrLf)
'Get EnvironmentValue
'' strKeyname = "ProductDir"
'' Ret = GetRegValue(strKeyroot,strKeyname)
'' strGFDCname = "DLIB"
'' Ret = GetRegValue(strGFDCroot,strGFDCname)
'ファイルに出力 "set " & strGFDCname & "=" & Ret
objFile.Close
' ファイルハンドルをクローズする。
Set objFile = Nothing
Set objFSO = Nothing
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("Mkinclude.win", 2, True)
objFile.Write("#" & vbCrLf)
objFile.Write("# MkInclude for nmake" & vbCrLf)
objFile.Write("#" & vbCrLf)
objFile.Write("# Copyright (C) 2004 GFD Dennou Club. All rights reserved." & vbCrLf)
objFile.Write("#" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("PREFIX = ""C:\dcl-fortran""" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("FC = " & FC & vbCrLf)
objFile.Write("FCVER = " & MaxVersion & vbCrLf)
objFile.Write("CC = " & CC & vbCrLf)
objFile.Write("CCVER = " & MaxCLVersion & vbCrLf)
objFile.Write("FTOL = " & "FTOL" & vbCrLf)
objFile.Write("CP = @copy /y" & vbCrLf)
objFile.Write("MV = @move /y" & vbCrLf)
objFile.Write("RM = @del" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("INTMAX = Z'7FFFFFFF'" & vbCrLf)
objFile.Write("REALMAX = Z'7F7FFFFF'" & vbCrLf)
objFile.Write("REALMIN = Z'00800000'" & vbCrLf)
objFile.Write("REPSL = 1.19221E-06" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("IWIDTH = 900" & vbCrLf)
objFile.Write("IHEIGHT = 650" & vbCrLf)
objFile.Write("DCLNWS = 2" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("#DSPATH = $(PREFIX)""\dbase\""" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("DSPATH = c:\dcl-fortran\dbase" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("MAXNGRID = 4000" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("SUFFIX = .obj .mod .f90 .f .c" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("all: build" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("subdirs:$(SUBDIRS_PRETARGET) $(SUBDIRS) $(SUBDIRS_POSTTARGET)" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("!if ""$(SUBDIRS)"" != """"" & vbCrLf)
objFile.Write("$(SUBDIRS):subdirs.mak.force-build" & vbCrLf)
objFile.Write(" cd $@" & vbCrLf)
objFile.Write(" @echo Entering $@" & vbCrLf)
objFile.Write(" nmake /NOLOGO /S /$(MAKEFLAGS) /f makefile.win subdirs" & vbCrLf)
objFile.Write(" cd .." & vbCrLf)
objFile.Write(" @echo Leaving $@" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("subdirs.mak.force-build:" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("!endif" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("install-exec: install-exec-unique" & vbCrLf)
objFile.Write(" IF EXIST *.obj $(CP) *.obj $(ROOTDIR)" & vbCrLf)
objFile.Write(" IF EXIST *.mod $(CP) *.mod $(ROOTDIR)" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("clean-exec: clean-exec-unique" & vbCrLf)
objFile.Write(" IF EXIST *.mod $(RM) *.mod" & vbCrLf)
objFile.Write(" IF EXIST *.obj $(RM) *.obj" & vbCrLf)
objFile.Write(" IF EXIST *.lib $(RM) *.lib" & vbCrLf)
objFile.Write(" IF EXIST *.bak $(RM) *.bak" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write(".f90.obj:" & vbCrLf)
objFile.Write(" @echo $*.f90" & vbCrLf)
objFile.Write(" $(FC) /c $*.f90" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write(".f90.mod:" & vbCrLf)
objFile.Write(" @echo $*.f90" & vbCrLf)
objFile.Write(" $(FC) /c $*.f90" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write(".f.obj:" & vbCrLf)
objFile.Write(" @echo $*.f" & vbCrLf)
objFile.Write(" $(FC) /c $*.f" & vbCrLf)
objFile.Write("" & vbCrLf)
objFile.Write(".c.obj:" & vbCrLf)
objFile.Write(" @echo $*.c" & vbCrLf)
objFile.Write(" $(CC) /c $*.c $(CFLAGS)" & vbCrLf)
objFile.Close
Set objFile = Nothing
Set objFSO = Nothing
'この先に関数を並べていく
Function GetRegValue(strKeyroot,strKeyname)
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
GetRegValue = WshShell.RegRead("HKLM" & "\" & strKeyroot & "\" & strKeyname)
If Err.Number <>0 Then
Err.Clear
GetRegValue=""
End if
On Error Goto 0
Set WshShell = Nothing
End Function
Function GetRegValueArray(strKeyname)
Dim Wcls
Dim Locator
Dim Service
Dim Ret
Dim KeySet
Dim Key
Dim MaxVersion
Dim Version
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer(vbNullString, "root\default")
Set Wcls = Service.Get("StdRegProv")
Wcls.EnumKey HKEY_LOCAL_MACHINE, strKeyname ,KeySet
GetRegValueArray=KeySet
Set Wcls = Nothing
Set Service = Nothing
Set Locator = Nothing
End Function
Function Is64()
Dim softwares
Dim Key
Dim SystemBits
SystemBits = False
Set softwares = CreateObject("Scripting.Dictionary")
softwares = GetRegValueArray("Software")
For Each Key In softwares
If Key = "Wow6432Node" Then
SystemBits = True
End If
Next
Is64 = SystemBits
End Function
Function GetMaxVersion(KeySet)
Dim MaxVersion
Dim AsciiMaxVersion
Dim Key
Dim Ret
Dim Version
MaxVersion = 0
For Each Key In KeySet
Ret = Ret & Key & vbCrLf
If IsNumeric(Key) Then
Version = CSng(Key)
Else
Version = 0
End If
If Version > MaxVersion Then
MaxVersion = Version
AsciiMaxVersion = Key
End If
Next
GetMaxVersion = AsciiMaxVersion
end Function
|