# Copyright: 2016-2023 Paul Obermeier (obermeier@tcl3d.org) # Distributed under BSD license. # # BuildType Windows: InnoSetup # BuildType Linux : tar # BuildType Dawin : tar # # Possible user configuration options (--copt): # Additional tag, ex. "Tag=-BI". # Version string, ex. "Version=8.7.0.4". proc Init_SetupOsg { libName libVersion } { SetScriptAuthor $libName "Paul Obermeier" "obermeier@tcl3d.org" SetLibHomepage $libName "http://www.bawt.tcl3d.org/" SetLibDependencies $libName "All" SetPlatforms $libName "Windows" "Linux" "Darwin" } proc _GetPackagesAsString { { fmt "%-20s %s\n" } } { set libStr "" foreach libName [lsort -dictionary [GetLibs]] { if { [IsSupportedPlatform $libName] } { if { $libName ne "SetupOsg" && \ $libName ne "InnoSetup" && \ $libName ne "Redistributables" && \ $libName ne "yasm" && \ $libName ne "SWIG" && \ ! [string match "CMake*" $libName] } { set libVersion [GetLibVersion $libName] append libStr [format $fmt $libName $libVersion] } } } return $libStr } proc Build_SetupOsg { libName libVersion buildDir instDir devDir distDir } { if { $libVersion eq "" } { set libVersion [GetLibVersion "OpenSceneGraph"] } if { [UseStage "Extract" $libName] } { ExtractLibrary $libName $buildDir } set libListFile [file join $instDir $libName-$libVersion.txt] if { [UseStage "Compile" $libName] } { # Store list of included libraries in separate file. WriteToFile $libListFile [_GetPackagesAsString] } if { [UseStage "Distribute" $libName] } { SingleFileCopy $libListFile "$distDir" } set setupStr [GetUserConfigValue $libName "Tag"] set userTag [GetUserConfigValue $libName "Version"] set fileTemplate "${libName}${setupStr}-$libVersion-[GetCompilerVersion]-[GetArchitecture]_Bawt-[GetVersion]" if { [IsWindows] } { set comprMode "lzma" set innoSetupFile [file join $instDir $fileTemplate] if { [UseStage "Compile" $libName] } { MultiFileCopy $buildDir $instDir "*" true MultiFileCopy [file join $devDir "bin"] "$instDir/Osg/bin" "*.exe *.dll" true MultiFileCopy [file join $devDir "include"] "$instDir/Osg/include" "*" true MultiFileCopy [file join $devDir "lib"] "$instDir/Osg/lib" "*" true set vcRedistName "None" if { [UseVisualStudio] } { set vcVersion [GetVisualStudioVersion] set vcRedistName [format "vcredist%s_%s.exe" $vcVersion [GetArchitecture]] set vcRedistFile [file join [GetOutputBuildDir] "Redistributables" $vcRedistName] if { [file exists $vcRedistFile] } { SingleFileCopy $vcRedistFile "$instDir" } } set sendToConst "usersendto" if { [GetLibVersion "InnoSetup"] eq "5.5.9" } { set sendToConst "sendto" } set issInFile [file join $instDir "Setup.in"] set issOutFile [file join $instDir "Setup.iss"] # Replace keywords in the InnoSetup template file. file copy $issInFile $issOutFile set versionStr $libVersion if { $userTag ne "" } { set versionStr $userTag } if { [regexp {[:alpha:]} $versionStr] } { # This is an alpha or beta release containing letters. # InnoSetup does not allow letters in Setup key "VersionInfoVersion". set versionStr "0.0.0.0" } set replaceList [list] lappend replaceList "@CURRENT_YEAR@" [clock format [clock seconds] -format "%Y"] lappend replaceList "@OSG_VERSION@" $versionStr lappend replaceList "@OSG_BITS@" [GetBits] lappend replaceList "@VS_VERSION@" [GetCompilerVersion] lappend replaceList "@INNO_COMPRESSION@" $comprMode lappend replaceList "@VC_REDIST_EXE@" $vcRedistName lappend replaceList "@SENDTO@" $sendToConst if { [info exists vcRedistFile] && [file exists $vcRedistFile] } { lappend replaceList "@VC_REDIST_ENABLE@" "" } else { lappend replaceList "@VC_REDIST_ENABLE@" "; " } ReplaceKeywords $issOutFile $replaceList set appInFile [file join $instDir "Readme-App.in"] set appOutFile [file join $instDir "Readme-App.txt"] # Replace keywords in the InnoSetup ReadmeApp file. file copy $appInFile $appOutFile set pkgsString [_GetPackagesAsString "%s-%s\n"] set numPkgs [expr [llength [split $pkgsString "\n"]] -1] set replaceList [list] lappend replaceList "@LIBRARY_LIST@" $pkgsString lappend replaceList "@NUM_LIBS@" $numPkgs ReplaceKeywords $appOutFile $replaceList # Call the InnoSetup program. set innoCmd [GetInnoProg] if { $innoCmd ne "" } { set curDir [pwd] cd $instDir set logFile [file join $instDir "InnoCompileLog.txt"] Log "InnoSetup" 2 Log "Input file : $issOutFile" 4 Log "Log file : $logFile" 4 Log "Output file: $innoSetupFile[GetExeSuffix]" 4 exec $innoCmd /o$instDir /f[file tail $innoSetupFile] $issOutFile >& $logFile cd $curDir } } if { [UseStage "Distribute" $libName] } { SignExecutables "$instDir" "${libName}*[GetExeSuffix]" SingleFileCopy $innoSetupFile[GetExeSuffix] "$distDir" } } elseif { [IsUnix] } { set tarFile [file join $instDir ${fileTemplate}.tar.gz] set setupFile [file join $distDir ${fileTemplate}.sh] if { [UseStage "Compile" $libName] } { MultiFileCopy $devDir "$instDir/Osg" "*" true TarGzip $tarFile $instDir/Osg } if { [UseStage "Distribute" $libName] } { set cmd "$buildDir/SetupAddPayload.sh $buildDir/SetupTemplate.sh $setupFile $tarFile" MSysRun $libName "SetupAddPayload" "" "$cmd" } } return true }