From 85072b1e7d2d0198e1e37f9097326aea260bee66 Mon Sep 17 00:00:00 2001 From: Josh Yelon Date: Wed, 3 Aug 2005 21:49:52 +0000 Subject: [PATCH] Packpanda changes --- doc/makepanda/makepanda.py | 44 +-- doc/makepanda/panda.nsi | 632 ------------------------------------- 2 files changed, 14 insertions(+), 662 deletions(-) delete mode 100755 doc/makepanda/panda.nsi diff --git a/doc/makepanda/makepanda.py b/doc/makepanda/makepanda.py index 5919cc8173..d11972d381 100755 --- a/doc/makepanda/makepanda.py +++ b/doc/makepanda/makepanda.py @@ -206,7 +206,6 @@ COMPILER=COMPILERS[0] OPTIMIZE="3" INSTALLER=0 GENMAN=0 -PPGAME=0 THIRDPARTY="thirdparty" VERSION="0.0.0" VERBOSE=1 @@ -488,7 +487,6 @@ def usage(problem): print " --optimize X (optimization level can be 1,2,3,4)" print " --thirdparty X (directory containing third-party software)" print " --installer (build an installer)" - print " --ppgame X (build a prepackaged game - see manual)" print " --v1 X (set the major version number)" print " --v2 X (set the minor version number)" print " --v3 X (set the sequence version number)" @@ -512,10 +510,10 @@ def usage(problem): def parseopts(args): global PREFIX,COMPILER,OPTIMIZE,OMIT,THIRDPARTY,INSTALLER,GENMAN - global PPGAME,VERSION,COMPRESSOR,DIRECTXSDK,VERBOSE + global VERSION,COMPRESSOR,DIRECTXSDK,VERBOSE longopts = [ "help","package-info","prefix=","compiler=","directx-sdk=","thirdparty=", - "optimize=","everything","nothing","installer","ppgame=","quiet","verbose", + "optimize=","everything","nothing","installer","quiet","verbose", "version=","lzma","no-python"] anything = 0 for pkg in PACKAGES: longopts.append("no-"+pkg.lower()) @@ -534,7 +532,6 @@ def parseopts(args): elif (option=="--verbose"): VERBOSE+=1 elif (option=="--installer"): INSTALLER=1 elif (option=="--genman"): GENMAN=1 - elif (option=="--ppgame"): PPGAME=value elif (option=="--everything"): OMIT=[] elif (option=="--nothing"): OMIT=PACKAGES[:] elif (option=="--version"): @@ -897,8 +894,6 @@ def printStatus(header,warnings): if (sys.platform == "win32"): if INSTALLER: print "Makepanda: Build installer, using",COMPRESSOR else : print "Makepanda: Don't build installer" - if PPGAME!=0: print "Makepanda: Build pprepackaged game ",PPGAME,"using",COMPRESSOR - else : print "Makepanda: Don't build pprepackaged game" print "Makepanda: Version ID: "+VERSION for x in warnings: print "Makepanda: "+x print "-------------------------------------------------------------------" @@ -1990,7 +1985,7 @@ ConditionalWriteFile(PREFIX+'/include/ctl3d.h', '/* dummy file to make MAX happy ######################################################################## ## -## Compile the 'ppython' executable and 'genpycode' executables +## Compile the 'ppython', 'genpycode', and 'packpanda' executables ## ######################################################################## @@ -1998,9 +1993,10 @@ if (OMIT.count("PYTHON")==0): IPATH=['direct/src/directbase'] CompileC(ipath=IPATH, opts=['BUILDING_PPYTHON'], src='ppython.cxx', obj='ppython.obj') CompileLink(opts=['WINUSER'], dll='ppython.exe', obj=['ppython.obj']) - IPATH=['direct/src/directbase'] CompileC(ipath=IPATH, opts=['BUILDING_GENPYCODE'], src='ppython.cxx', obj='genpycode.obj') CompileLink(opts=['WINUSER'], dll='genpycode.exe', obj=['genpycode.obj']) + CompileC(ipath=IPATH, opts=['BUILDING_PACKPANDA'], src='ppython.cxx', obj='packpanda.obj') + CompileLink(opts=['WINUSER'], dll='packpanda.exe', obj=['packpanda.obj']) ######################################################################## # @@ -4699,7 +4695,7 @@ if (icache!=0): # ########################################################################################## -def MakeInstallerNSIS(file,fullname,smdirectory,uninstallkey,installdir,ppgame): +def MakeInstallerNSIS(file,fullname,smdirectory,installdir): if (older(file, ALLTARGETS)): print "Building "+fullname+" installer. This can take up to an hour." if (COMPRESSOR != "lzma"): @@ -4711,13 +4707,15 @@ def MakeInstallerNSIS(file,fullname,smdirectory,uninstallkey,installdir,ppgame): def0 = '/DCOMPRESSOR="' + COMPRESSOR + '" ' def1 = '/DFULLNAME="' + fullname + '" ' def2 = '/DSMDIRECTORY="' + smdirectory + '" ' - def3 = '/DUNINSTALLKEY="' + uninstallkey + '" ' - def4 = '/DINSTALLDIR="' + installdir + '" ' - def5 = '' - if (ppgame): def5 = '/DPPGAME="' + ppgame + '" ' - oscmd("thirdparty/win-nsis/makensis.exe /V2 "+def0+def1+def2+def3+def4+def5+" makepanda/panda.nsi") + def3 = '/DINSTALLDIR="' + installdir + '" ' + def4 = '/DPANDA="..\\..\\..\\' + PREFIX + '" ' + def5 = '/DPSOURCE="..\\..\\.." ' + def6 = '/DPYEXTRAS="..\\..\\..\\thirdparty\\win-extras" ' + def7 = '/DOUTFILE="..\\..\\..\\nsis-output.exe" ' + oscmd("thirdparty/win-nsis/makensis.exe /V2 "+def0+def1+def2+def3+def4+def5+def6+def7+" direct/src/directscripts/packpanda.nsi") os.rename("nsis-output.exe", file) + def MakeInstallerDPKG(file): if (older(file,ALLTARGETS)): DEB=""" @@ -4780,26 +4778,12 @@ Description: The panda3D free 3D engine if (INSTALLER != 0): if (sys.platform == "win32"): - MakeInstallerNSIS("Panda3D-"+VERSION+".exe", "Panda3D", "Panda3D "+VERSION, - "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION, 0) + MakeInstallerNSIS("Panda3D-"+VERSION+".exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION) elif (sys.platform == "linux2") and (os.path.isfile("/usr/bin/dpkg-deb")): MakeInstallerDPKG("panda3d_"+VERSION+"_i386.deb") else: sys.exit("Do not know how to make an installer for this platform") - -if (PPGAME!=0): - if (os.path.isdir(PPGAME)==0): - sys.exit("No such directory "+PPGAME) - if (os.path.exists(os.path.join(PPGAME,PPGAME+".py"))==0): - sys.exit("No such file "+PPGAME+"/"+PPGAME+".py") - if (sys.platform == "win32"): - MakeInstallerNSIS(PPGAME+"-"+VERSION+".exe", PPGAME, PPGAME+" "+VERSION, - PPGAME+" "+VERSION, "C:\\"+PPGAME+"-"+VERSION, PPGAME) - else: - sys.exit("Do not know how to make a prepackaged game for this platform") - - ########################################################################################## # # Print final status report. diff --git a/doc/makepanda/panda.nsi b/doc/makepanda/panda.nsi deleted file mode 100755 index 2a04747fad..0000000000 --- a/doc/makepanda/panda.nsi +++ /dev/null @@ -1,632 +0,0 @@ -; Panda3D installation script for the Nullsoft Installation System (NSIS). -; Jon Parise -; with Ben Johnson -; with Jason Pratt -; mangled by Josh Yelon - -; Caller needs to define these variables: -; COMPRESSOR - either zlib or lzma -; FULLNAME - full name of what we're building (ie, "Panda3D") -; SMDIRECTORY - where to put this in the start menu (ie, "Panda3D VERSION") -; UNINSTALLKEY - what registry key to use for uninstaller (ie, "Panda3D VERSION") -; INSTALLDIR - where to install the program (ie, "C:\Program Files\Panda3D-VERSION") -; PPGAME - only if making a prepackaged game. (ie, "Airblade") - -!define PANDA ..\built -!define PSOURCE .. - -; Use the Modern UI -!include "PandaMUI.nsh" -; Windows system messaging support -!include "${NSISDIR}\Include\WinMessages.nsh" - -Name "${FULLNAME}" -InstallDir "${INSTALLDIR}" -OutFile "..\nsis-output.exe" - -SetCompress auto -SetCompressor ${COMPRESSOR} - -!define MUI_ABORTWARNING -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_FUNCTION runFunction -!define MUI_FINISHPAGE_RUN_TEXT "Run the Panda Greeting Card" - -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "${PSOURCE}\doc\LICENSE" -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH - -!insertmacro MUI_UNPAGE_WELCOME -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES -!insertmacro MUI_UNPAGE_FINISH - -!insertmacro MUI_LANGUAGE "Panda3DEnglish" - -ShowInstDetails show -ShowUninstDetails show -LicenseData ${PSOURCE}\doc\LICENSE - -InstType "Typical" - -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -var READABLE -var TUTNAME - -Function runFunction - ExecShell "open" "$SMPROGRAMS\${SMDIRECTORY}\Panda Greeting Card.lnk" -FunctionEnd - -Section "${SMDIRECTORY}" SecCore - SectionIn 1 2 3 RO - - SetOutPath $INSTDIR - SetOverwrite try - - SetOutPath $INSTDIR - File ${PSOURCE}\doc\LICENSE - SetOutPath $INSTDIR\bin - File /r ${PANDA}\bin\*.dll - SetOutPath $INSTDIR\etc - File /r ${PANDA}\etc\* - SetOutPath $INSTDIR\direct - File /r /x CVS /x Opt?-Win32 ${PSOURCE}\direct\*.py - File ${PANDA}\direct\__init__.py - SetOutPath $INSTDIR\pandac - File /r ${PANDA}\pandac\*.py - SetOutPath $INSTDIR\python - File /r /x CVS /x *.pyc ${PANDA}\python\* - - RMDir /r "$SMPROGRAMS\${SMDIRECTORY}" - CreateDirectory "$SMPROGRAMS\${SMDIRECTORY}" - - !ifdef PPGAME - - SetOutPath $INSTDIR\bin - File /r ${PANDA}\bin\ppython.exe - SetOutpath $INSTDIR\${PPGAME} - File /r ${PSOURCE}\${PPGAME}\* - SetOutPath $INSTDIR\${PPGAME} - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\Play ${FULLNAME}.lnk" "$INSTDIR\bin\ppython.exe" "${PPGAME}.py" "$INSTDIR\bin\ppython.exe" 0 SW_SHOWMINIMIZED "" "Play ${FULLNAME}" - - !else - - SetOutPath $INSTDIR\plugins - File /nonfatal /r ${PANDA}\plugins\*.dle - File /nonfatal /r ${PANDA}\plugins\*.dlo - File /nonfatal /r ${PANDA}\plugins\*.dlm - File /nonfatal /r ${PANDA}\plugins\*.mll - File /nonfatal /r ${PANDA}\plugins\*.mel - SetOutPath $INSTDIR\pandac\input - File /r ${PANDA}\pandac\input\* - SetOutPath $INSTDIR\bin - File /r ${PANDA}\bin\*.exe - SetOutPath $INSTDIR\lib - File /r /x *.exp ${PANDA}\lib\* - SetOutPath $INSTDIR\include - File /r /x *.exp ${PANDA}\include\* - SetOutPath $INSTDIR\SceneEditor - File /r /x CVS ${PSOURCE}\SceneEditor\*.* - SetOutPath $INSTDIR\Pmw - File /r /x CVS ${PANDA}\Pmw\* - SetOutPath $INSTDIR\epydoc - File /r /x CVS ${PANDA}\epydoc\* - SetOutPath $INSTDIR - File /r /x CVS ${PSOURCE}\doc\ReleaseNotes - SetOutPath $INSTDIR\python\lib - File /nonfatal /r ${PSOURCE}\thirdparty\win-extras\* - - DetailPrint "Extracting models ..." - SetDetailsPrint textonly - SetOutPath $INSTDIR\models - File /r /x CVS ${PANDA}\models\* - - DetailPrint "Extracting samples ..." - SetDetailsPrint textonly - SetOutPath $INSTDIR\samples - File /r /x CVS ${PSOURCE}\samples\* - - SetOutPath $INSTDIR - WriteINIStr $INSTDIR\Website.url "InternetShortcut" "URL" "http://panda3d.etc.cmu.edu/" - WriteINIStr $INSTDIR\Manual.url "InternetShortcut" "URL" "http://panda3d.etc.cmu.edu/manual/" - SetOutPath $INSTDIR\samples\GreetingCard - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\Panda Greeting Card.lnk" "$INSTDIR\bin\ppython.exe" 'GreetingCard.py "$SMPROGRAMS\${SMDIRECTORY}"' "$INSTDIR\bin\ppython.exe" 0 SW_SHOWMINIMIZED "" "Panda Greeting Card" - SetOutPath $INSTDIR - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\Panda Manual.lnk" "$INSTDIR\Manual.url" "" "$INSTDIR\bin\ppython.exe" 0 "" "" "Panda Manual" - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\Panda Website.lnk" "$INSTDIR\Website.url" "" "$INSTDIR\bin\ppython.exe" 0 "" "" "Panda Website" - - FindFirst $0 $1 $INSTDIR\samples\*--* - loop: - StrCmp $1 "" done - Push $1 - Push "--" - Push "\" - Call StrRep - Push "-" - Push " " - Call StrRep - Pop $R0 - StrCpy $READABLE $R0 - CreateDirectory "$SMPROGRAMS\${SMDIRECTORY}\$READABLE" - SetOutPath $INSTDIR\samples\$1 - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\$READABLE\Introduction.lnk" "$INSTDIR\samples\$1\Intro.html" - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\$READABLE\View Source Code.lnk" "$INSTDIR\samples\$1" - FindFirst $2 $3 $INSTDIR\samples\$1\Tut-*.py - iloop: - StrCmp $3 "" idone - StrCpy $TUTNAME $3 -3 4 - Push $TUTNAME - Push "-" - Push " " - Call StrRep - Pop $R0 - StrCpy $TUTNAME $R0 - CreateShortCut "$SMPROGRAMS\${SMDIRECTORY}\$READABLE\Run $TUTNAME.lnk" "$INSTDIR\bin\ppython.exe" "$3" "$INSTDIR\bin\ppython.exe" 0 SW_SHOWMINIMIZED "" "Run $TUTNAME" - CreateShortCut "$INSTDIR\samples\$1\Run $TUTNAME.lnk" "$INSTDIR\bin\ppython.exe" "$3" "$INSTDIR\bin\ppython.exe" 0 SW_SHOWMINIMIZED "" "Run $TUTNAME" - FindNext $2 $3 - goto iloop - idone: - next: - FindNext $0 $1 - Goto loop - done: - - !endif - - -SectionEnd - - -Section -post - - !ifndef PPGAME - # Add the "bin" directory to the PATH. - DetailPrint "Adding 'bin' directory to the PATH..." - Push "$INSTDIR\bin" - Call AddToPath - !endif - - DetailPrint "Registering Helix Preferences..." - WriteRegStr HKLM "Software\Helix\HelixSDK\10.0\Preferences\UseOverlay" "" "0" - WriteRegStr HKLM "Software\Helix\HelixSDK\10.0\Preferences\UseWinDraw" "" "0" - WriteRegStr HKCU "Software\Helix\HelixSDK\10.0\Preferences\UseOverlay" "" "0" - WriteRegStr HKCU "Software\Helix\HelixSDK\10.0\Preferences\UseWinDraw" "" "0" - - DetailPrint "Adding the uninstaller ..." - Delete "$INSTDIR\uninst.exe" - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINSTALLKEY}" "DisplayName" "${SMDIRECTORY}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINSTALLKEY}" "UninstallString" '"$INSTDIR\uninst.exe"' - CreateShortcut "$SMPROGRAMS\${SMDIRECTORY}\Uninstall ${FULLNAME}.lnk" "$INSTDIR\uninst.exe" "" -SectionEnd - -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "The core files required to use ${FULLNAME}." - !ifndef PPGAME - !insertmacro MUI_DESCRIPTION_TEXT ${SecSamples} "Sample worlds, scripts, models and tutorials." - !endif -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -Section Uninstall - -!ifndef PPGAME - DetailPrint "Removing ${SMDIRECTORY} from PATH ..." - Push "$INSTDIR\bin" - Call un.RemoveFromPath -!endif - - Delete "$INSTDIR\uninst.exe" - DetailPrint "Removing Start Menu folder ..." - RMDir /r "$SMPROGRAMS\${SMDIRECTORY}" - DetailPrint "Completely removing the directory ($INSTDIR)..." - RMDir /r "$INSTDIR" - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINSTALLKEY}" - -SectionEnd - -# --[ Utility Functions ]------------------------------------------------------ - -; From: http://nsis.sourceforge.net/archive/viewpage.php?pageid=91 -Function IsNT - Push $0 - ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - StrCmp $0 "" 0 IsNT_yes - ; we are not NT. - Pop $0 - Push 0 - Return - IsNT_yes: - ; NT!!! - Pop $0 - Push 1 -FunctionEnd - -; From: http://nsis.sourceforge.net/archive/viewpage.php?pageid=91 -Function un.IsNT - Push $0 - ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - StrCmp $0 "" 0 unIsNT_yes - ; we are not NT. - Pop $0 - Push 0 - Return - unIsNT_yes: - ; NT!!! - Pop $0 - Push 1 -FunctionEnd - -; From: http://nsis.sourceforge.net/archive/viewpage.php?pageid=91 -Function un.StrStr - Push $0 - Exch - Pop $0 ; $0 now have the string to find - Push $1 - Exch 2 - Pop $1 ; $1 now have the string to find in - Exch - Push $2 - Push $3 - Push $4 - Push $5 - StrCpy $2 -1 - StrLen $3 $0 - StrLen $4 $1 - IntOp $4 $4 - $3 - unStrStr_loop: - IntOp $2 $2 + 1 - IntCmp $2 $4 0 0 unStrStrReturn_notFound - StrCpy $5 $1 $3 $2 - StrCmp $5 $0 unStrStr_done unStrStr_loop - unStrStrReturn_notFound: - StrCpy $2 -1 - unStrStr_done: - Pop $5 - Pop $4 - Pop $3 - Exch $2 - Exch 2 - Pop $0 - Pop $1 -FunctionEnd - -; From: http://nsis.sourceforge.net/archive/viewpage.php?pageid=91 -; Commentary and smarter ';' checking by Jon Parise -Function AddToPath - Exch $0 - Push $1 - Push $2 - Push $3 - Call IsNT - Pop $1 - - StrCmp $1 1 AddToPath_NT - ; We're not on NT, so modify the AUTOEXEC.BAT file. - StrCpy $1 $WINDIR 2 - FileOpen $1 "$1\autoexec.bat" a - FileSeek $1 0 END - GetFullPathName /SHORT $0 $0 - FileWrite $1 "$\r$\nSET PATH=%PATH%;$0$\r$\n" - FileClose $1 - Goto AddToPath_done - - AddToPath_NT: - ReadRegStr $1 HKCU "Environment" "PATH" - Call IsUserAdmin - Pop $3 - ; If this is an Admin user, use the System env. variable instead of the user's env. variable - StrCmp $3 1 0 +2 - ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" - - ; If the PATH string is empty, jump over the mangling routines. - StrCmp $1 "" AddToPath_NTdoIt - - ; Pull off the last character of the PATH string. If it's a semicolon, - ; we don't need to add another one, so jump to the section where we - ; append the new PATH component(s). - StrCpy $2 $1 1 -1 - StrCmp $2 ";" AddToPath_NTAddPath AddToPath_NTAddSemi - - AddToPath_NTAddSemi: - StrCpy $1 "$1;" - Goto AddToPath_NTAddPath - AddToPath_NTAddPath: - StrCpy $0 "$1$0" - Goto AddToPath_NTdoIt - AddToPath_NTdoIt: - Call IsUserAdmin - Pop $3 - StrCmp $3 1 0 NotAdmin - WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $0 - Goto AddToPath_done - - NotAdmin: - WriteRegExpandStr HKCU "Environment" "PATH" $0 - AddToPath_done: - SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 - Pop $3 - Pop $2 - Pop $1 - Pop $0 -FunctionEnd - -; From: http://nsis.sourceforge.net/archive/viewpage.php?pageid=91 -Function un.RemoveFromPath - Exch $0 - Push $1 - Push $2 - Push $3 - Push $4 - Push $5 - Call un.IsNT - Pop $1 - StrCmp $1 1 unRemoveFromPath_NT - ; Not on NT - StrCpy $1 $WINDIR 2 - FileOpen $1 "$1\autoexec.bat" r - GetTempFileName $4 - FileOpen $2 $4 w - GetFullPathName /SHORT $0 $0 - StrCpy $0 "SET PATH=%PATH%;$0" - SetRebootFlag true - Goto unRemoveFromPath_dosLoop - - unRemoveFromPath_dosLoop: - FileRead $1 $3 - StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoop - StrCmp $3 "$0$\n" unRemoveFromPath_dosLoop - StrCmp $3 "$0" unRemoveFromPath_dosLoop - StrCmp $3 "" unRemoveFromPath_dosLoopEnd - FileWrite $2 $3 - Goto unRemoveFromPath_dosLoop - - unRemoveFromPath_dosLoopEnd: - FileClose $2 - FileClose $1 - StrCpy $1 $WINDIR 2 - Delete "$1\autoexec.bat" - CopyFiles /SILENT $4 "$1\autoexec.bat" - Delete $4 - Goto unRemoveFromPath_done - - unRemoveFromPath_NT: - StrLen $2 $0 - Call un.IsUserAdmin - Pop $5 - StrCmp $5 1 0 NotAdmin - ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" - Push $1 - Push $0 - Call un.StrStr ; Find $0 in $1 - Pop $0 ; pos of our dir - IntCmp $0 -1 unRemoveFromPath_done - ; else, it is in path - StrCpy $3 $1 $0 ; $3 now has the part of the path before our dir - IntOp $2 $2 + $0 ; $2 now contains the pos after our dir in the path (';') - IntOp $2 $2 + 1 ; $2 now containts the pos after our dir and the semicolon. - StrLen $0 $1 - StrCpy $1 $1 $0 $2 - StrCpy $3 "$3$1" - WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $3 - SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 - Goto unRemoveFromPath_done - - - NotAdmin: - ReadRegStr $1 HKCU "Environment" "PATH" - Push $1 - Push $0 - Call un.StrStr ; Find $0 in $1 - Pop $0 ; pos of our dir - IntCmp $0 -1 unRemoveFromPath_done - ; else, it is in path - StrCpy $3 $1 $0 ; $3 now has the part of the path before our dir - IntOp $2 $2 + $0 ; $2 now contains the pos after our dir in the path (';') - IntOp $2 $2 + 1 ; $2 now containts the pos after our dir and the semicolon. - StrLen $0 $1 - StrCpy $1 $1 $0 $2 - StrCpy $3 "$3$1" - WriteRegExpandStr HKCU "Environment" "PATH" $3 - SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 - - unRemoveFromPath_done: - Pop $5 - Pop $4 - Pop $3 - Pop $2 - Pop $1 - Pop $0 -FunctionEnd - -; From: http://nsis.sourceforge.net/archive/nsisweb.php?page=329&instances=0,11 -; Localized by Ben Johnson (bkj@andrew.cmu.edu) -Function IsUserAdmin - Push $0 - Push $1 - Push $2 - Push $3 - Call IsNT - Pop $1 - - ClearErrors - UserInfo::GetName - ;IfErrors Win9x - Pop $2 - UserInfo::GetAccountType - Pop $3 - - ; Compare results of IsNT with "1" - StrCmp $1 1 0 NotNT - ;This is NT - - - StrCmp $3 "Admin" 0 NotAdmin - ; Observation: I get here when running Win98SE. (Lilla) - ; The functions UserInfo.dll looks for are there on Win98 too, - ; but just don't work. So UserInfo.dll, knowing that admin isn't required - ; on Win98, returns admin anyway. (per kichik) - ; MessageBox MB_OK 'User "$R1" is in the Administrators group' - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 1 - Return - - NOtAdmin: - ; You should still check for an empty string because the functions - ; UserInfo.dll looks for may not be present on Windows 95. (per kichik) - - #StrCmp $2 "" Win9x - #StrCpy $0 0 - ;MessageBox MB_OK 'User "$2" is in the "$3" group' - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 0 - Return - - ;Because we use IsNT, this is redundant. - #Win9x: - # ; comment/message below is by UserInfo.nsi author: - # ; This one means you don't need to care about admin or - # ; not admin because Windows 9x doesn't either - # ;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!" - # StrCpy $0 0 - - NotNT: - ;We are not NT - ;Win9x doesn't have "admin" users. - ;Let the user do whatever. - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 1 - -FunctionEnd - -Function un.IsUserAdmin - Push $0 - Push $1 - Push $2 - Push $3 - Call un.IsNT - Pop $1 - - ClearErrors - UserInfo::GetName - ;IfErrors Win9x - Pop $2 - UserInfo::GetAccountType - Pop $3 - - ; Compare results of IsNT with "1" - StrCmp $1 1 0 NotNT - ;This is NT - - - StrCmp $3 "Admin" 0 NotAdmin - ; Observation: I get here when running Win98SE. (Lilla) - ; The functions UserInfo.dll looks for are there on Win98 too, - ; but just don't work. So UserInfo.dll, knowing that admin isn't required - ; on Win98, returns admin anyway. (per kichik) - ; MessageBox MB_OK 'User "$R1" is in the Administrators group' - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 1 - Return - - NOtAdmin: - ; You should still check for an empty string because the functions - ; UserInfo.dll looks for may not be present on Windows 95. (per kichik) - - #StrCmp $2 "" Win9x - #StrCpy $0 0 - ;MessageBox MB_OK 'User "$2" is in the "$3" group' - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 0 - Return - - ;Because we use IsNT, this is redundant. - #Win9x: - # ; comment/message below is by UserInfo.nsi author: - # ; This one means you don't need to care about admin or - # ; not admin because Windows 9x doesn't either - # ;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!" - # StrCpy $0 0 - - NotNT: - ;We are not NT - ;Win9x doesn't have "admin" users. - ;Let the user do whatever. - Pop $3 - Pop $2 - Pop $1 - Pop $0 - - Push 1 - -FunctionEnd - -Function StrRep - - ;Written by dirtydingus 2003-02-20 04:30:09 - ; USAGE - ;Push String to do replacement in (haystack) - ;Push String to replace (needle) - ;Push Replacement - ;Call StrRep - ;Pop $R0 result - ;StrCpy $Result STR $R0 - - Exch $R4 ; $R4 = Replacement String - Exch - Exch $R3 ; $R3 = String to replace (needle) - Exch 2 - Exch $R1 ; $R1 = String to do replacement in (haystack) - Push $R2 ; Replaced haystack - Push $R5 ; Len (needle) - Push $R6 ; len (haystack) - Push $R7 ; Scratch reg - StrCpy $R2 "" - StrLen $R5 $R3 - StrLen $R6 $R1 -loop: - StrCpy $R7 $R1 $R5 - StrCmp $R7 $R3 found - StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 - StrCpy $R2 "$R2$R7" - StrCpy $R1 $R1 $R6 1 - StrCmp $R1 "" done loop -found: - StrCpy $R2 "$R2$R4" - StrCpy $R1 $R1 $R6 $R5 - StrCmp $R1 "" done loop -done: - StrCpy $R3 $R2 - Pop $R7 - Pop $R6 - Pop $R5 - Pop $R2 - Pop $R1 - Pop $R4 - Exch $R3 - -FunctionEnd -