diff options
Diffstat (limited to 'buildtools')
28 files changed, 1664 insertions, 1215 deletions
diff --git a/buildtools/build_platform_deps.xml b/buildtools/build_platform_deps.xml new file mode 100755 index 0000000..f30ba7c --- /dev/null +++ b/buildtools/build_platform_deps.xml @@ -0,0 +1,16 @@ +<project toolsVersion="5.2">
+ <dependency name="cmake">
+ <package name="cmake-x64" version="3.7.0"/>
+ <package name="cmake-linux-x86_64" version="3.7.2" platforms="linux"/>
+ </dependency>
+ <dependency name="CapnProto">
+ <package name="CapnProto" version="0.6.1.4" />
+ </dependency>
+ <dependency name="CMakeModules">
+ <package name="CMakeModules" version="1.1.0"/>
+ <package name="CMakeModules-xboxone" version="1.0.6.1" platforms="win.durango"/>
+ </dependency>
+ <dependency name="UE4LinuxToolChainV8">
+ <package name="UE4LinuxToolchainV8" version="1.0.0.0" platforms="win.linux-UE4-cross"/>
+ </dependency>
+</project>
\ No newline at end of file diff --git a/buildtools/cmake_projects_linux_ue4_crosscompile.bat b/buildtools/cmake_projects_linux_ue4_crosscompile.bat index 9e92ce9..6c94800 100644..100755 --- a/buildtools/cmake_projects_linux_ue4_crosscompile.bat +++ b/buildtools/cmake_projects_linux_ue4_crosscompile.bat @@ -1,74 +1,75 @@ -@echo off -SetLocal EnableDelayedExpansion -echo ############################################################################################# -echo Starting %~n0 %date% %time% -echo ############################################################################################# - -echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION% - -if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2 - -IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED - -IF DEFINED PM_UE4LinuxToolchainV8_PATH SET LINUX_MULTIARCH_ROOT=%PM_UE4LinuxToolchainV8_PATH% - -IF NOT DEFINED LINUX_MULTIARCH_ROOT GOTO LINUX_MULTIARCH_ROOT_UNDEFINED - -::Also set legacy path since the LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake uses it -pushd "%LINUX_MULTIARCH_ROOT%\x86_64-unknown-linux-gnu" -SET LINUX_ROOT=%cd% -popd - -REM Now set up the CMake command from PM_PACKAGES_ROOT -::Ugly hack, this will be the linux one, due to packman downloading Linux binaries, so swap the path -SET CMAKECMD=%PM_cmake_PATH_Win%\bin\cmake.exe - -echo Cmake: %CMAKECMD% - - -REM Generate projects here - -echo. -echo ############################################################################################# -ECHO "Creating Linux UE4 Cross-compile NMake files" - -echo -DUE4_LINUX_CROSSCOMPILE=TRUE -DCMAKE_TOOLCHAIN_FILE=%PM_CMakeModules_PATH%/Linux/LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake -DTARGET_BUILD_PLATFORM=linux -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%/lib/linux64-UE4 -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 - -SET CMAKE_CMD_LINE_PARAMS=-DUE4_LINUX_CROSSCOMPILE=TRUE -DCMAKE_TOOLCHAIN_FILE=%PM_CMakeModules_PATH%/Linux/LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake -DTARGET_BUILD_PLATFORM=linux -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%/lib/linux64-UE4 -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 - -echo CMAKE_CMD_LINE_PARAMS -echo %CMAKE_CMD_LINE_PARAMS% - -if not exist %BLAST_ROOT_DIR%/bin/linux64-UE4 mkdir %BLAST_ROOT_DIR%/bin/linux64-UE4 - -::Seems like there are no checked or profile Linux PhysX Libs -FOR %%Z IN (debug, release, checked, profile) DO ( -::FOR %%Z IN (debug, release) DO ( - SET CMAKE_OUTPUT_DIR=%BLAST_ROOT_DIR%\compiler\linux64-%%Z-UE4\ - IF EXIST !CMAKE_OUTPUT_DIR! rmdir /S /Q !CMAKE_OUTPUT_DIR! - mkdir !CMAKE_OUTPUT_DIR! - pushd !CMAKE_OUTPUT_DIR! - "%CMAKECMD%" %BLAST_ROOT_DIR% -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%%Z %CMAKE_CMD_LINE_PARAMS% - popd - if !ERRORLEVEL! NEQ 0 exit /b !ERRORLEVEL! -) - - -GOTO :End - -:LINUX_MULTIARCH_ROOT_UNDEFINED -ECHO LINUX_MULTIARCH_ROOT has to be defined, pointing to UE4 Linux toolchain -PAUSE -GOTO END - -:PM_PACKAGES_ROOT_UNDEFINED -ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree. -PAUSE -GOTO END - -:DONT_RUN_STEP_2 -ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead -PAUSE -GOTO END - -:End +@echo off
+SetLocal EnableDelayedExpansion
+echo #############################################################################################
+echo Starting %~n0 %date% %time%
+echo #############################################################################################
+
+echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION%
+
+if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2
+
+IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED
+
+IF DEFINED PM_UE4LinuxToolchainV8_PATH SET LINUX_MULTIARCH_ROOT=%PM_UE4LinuxToolchainV8_PATH%
+
+IF NOT DEFINED LINUX_MULTIARCH_ROOT GOTO LINUX_MULTIARCH_ROOT_UNDEFINED
+
+::Also set legacy path since the LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake uses it
+pushd "%LINUX_MULTIARCH_ROOT%\x86_64-unknown-linux-gnu"
+SET LINUX_ROOT=%cd%
+popd
+
+REM Now set up the CMake command
+SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe
+
+echo Cmake: %CMAKECMD%
+
+:: We need this for NMake
+@call "%VS140COMNTOOLS%VsdevCmd.bat"
+
+REM Generate projects here
+
+echo.
+echo #############################################################################################
+ECHO "Creating Linux UE4 Cross-compile NMake files"
+
+echo -DUE4_LINUX_CROSSCOMPILE=TRUE -DCMAKE_TOOLCHAIN_FILE=%PM_CMakeModules_PATH%/Linux/LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake -DTARGET_BUILD_PLATFORM=linux -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%/lib/linux64-UE4 -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4
+
+SET CMAKE_CMD_LINE_PARAMS=-DUE4_LINUX_CROSSCOMPILE=TRUE -DCMAKE_TOOLCHAIN_FILE=%PM_CMakeModules_PATH%/Linux/LinuxCrossToolchain.x86_64-unknown-linux-gnu.cmake -DTARGET_BUILD_PLATFORM=linux -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%/lib/linux64-UE4 -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4 -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%/bin/linux64-UE4
+
+echo CMAKE_CMD_LINE_PARAMS
+echo %CMAKE_CMD_LINE_PARAMS%
+
+if not exist %BLAST_ROOT_DIR%/bin/linux64-UE4 mkdir %BLAST_ROOT_DIR%/bin/linux64-UE4
+
+::Seems like there are no checked or profile Linux PhysX Libs
+FOR %%Z IN (debug, release, checked, profile) DO (
+::FOR %%Z IN (debug, release) DO (
+ SET CMAKE_OUTPUT_DIR=%BLAST_ROOT_DIR%\compiler\linux64-%%Z-UE4\
+ IF EXIST !CMAKE_OUTPUT_DIR! rmdir /S /Q !CMAKE_OUTPUT_DIR!
+ mkdir !CMAKE_OUTPUT_DIR!
+ pushd !CMAKE_OUTPUT_DIR!
+ "%CMAKECMD%" %BLAST_ROOT_DIR% -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%%Z %CMAKE_CMD_LINE_PARAMS%
+ popd
+ if !ERRORLEVEL! NEQ 0 exit /b !ERRORLEVEL!
+)
+
+
+GOTO :End
+
+:LINUX_MULTIARCH_ROOT_UNDEFINED
+ECHO LINUX_MULTIARCH_ROOT has to be defined, pointing to UE4 Linux toolchain
+PAUSE
+GOTO END
+
+:PM_PACKAGES_ROOT_UNDEFINED
+ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree.
+PAUSE
+GOTO END
+
+:DONT_RUN_STEP_2
+ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead
+PAUSE
+GOTO END
+
+:End
diff --git a/buildtools/cmake_projects_vc14win32.bat b/buildtools/cmake_projects_vc14win32.bat index 099292a..98f46cc 100644..100755 --- a/buildtools/cmake_projects_vc14win32.bat +++ b/buildtools/cmake_projects_vc14win32.bat @@ -1,47 +1,47 @@ -@echo off - -echo ############################################################################################# -echo Starting %~n0 %date% %time% -echo ############################################################################################# - -echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION% - -if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2 - -IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED - -REM Now set up the CMake command from PM_PACKAGES_ROOT - -SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe - -echo "Cmake: %CMAKECMD%" - - -REM Generate projects here - -echo. -echo ############################################################################################# -ECHO "Creating VS2015 Win32" - -SET CMAKE_OUTPUT_DIR=compiler\vc14win32-cmake\ -IF EXIST %CMAKE_OUTPUT_DIR% rmdir /S /Q %CMAKE_OUTPUT_DIR% -mkdir %CMAKE_OUTPUT_DIR% -pushd %CMAKE_OUTPUT_DIR% -%CMAKECMD% %BLAST_ROOT_DIR% -G "Visual Studio 14 2015" -AWin32 -DTARGET_BUILD_PLATFORM=Windows -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%\lib\vc14win32-cmake\ -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win32-cmake\ -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win32-cmake\ -popd -if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% - - -GOTO :End - -:PM_PACKAGES_ROOT_UNDEFINED -ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree. -PAUSE -GOTO END - -:DONT_RUN_STEP_2 -ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead -PAUSE -GOTO END - -:End +@echo off
+
+echo #############################################################################################
+echo Starting %~n0 %date% %time%
+echo #############################################################################################
+
+echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION%
+
+if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2
+
+IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED
+
+REM Now set up the CMake command from PM_PACKAGES_ROOT
+
+SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe
+
+echo "Cmake: %CMAKECMD%"
+
+
+REM Generate projects here
+
+echo.
+echo #############################################################################################
+ECHO "Creating VS2015 Win32"
+
+SET CMAKE_OUTPUT_DIR="%~dp0..\compiler\vc14win32-cmake"
+IF EXIST %CMAKE_OUTPUT_DIR% rmdir /S /Q %CMAKE_OUTPUT_DIR%
+mkdir %CMAKE_OUTPUT_DIR%
+pushd %CMAKE_OUTPUT_DIR%
+%CMAKECMD% %BLAST_ROOT_DIR% -G "Visual Studio 14 2015" -AWin32 -DTARGET_BUILD_PLATFORM=Windows -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%\lib\vc14win32-cmake\ -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win32-cmake\ -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win32-cmake\
+popd
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+
+
+GOTO :End
+
+:PM_PACKAGES_ROOT_UNDEFINED
+ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree.
+PAUSE
+GOTO END
+
+:DONT_RUN_STEP_2
+ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead
+PAUSE
+GOTO END
+
+:End
diff --git a/buildtools/cmake_projects_vc14win64.bat b/buildtools/cmake_projects_vc14win64.bat index d918f56..465f284 100644..100755 --- a/buildtools/cmake_projects_vc14win64.bat +++ b/buildtools/cmake_projects_vc14win64.bat @@ -1,47 +1,47 @@ -@echo off - -echo ############################################################################################# -echo Starting %~n0 %date% %time% -echo ############################################################################################# - -echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION% - -if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2 - -IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED - -REM Now set up the CMake command from PM_PACKAGES_ROOT - -SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe - -echo "Cmake: %CMAKECMD%" - - -REM Generate projects here - -echo. -echo ############################################################################################# -ECHO "Creating VS2015 Win64" - -SET CMAKE_OUTPUT_DIR=compiler\vc14win64-cmake\ -IF EXIST %CMAKE_OUTPUT_DIR% rmdir /S /Q %CMAKE_OUTPUT_DIR% -mkdir %CMAKE_OUTPUT_DIR% -pushd %CMAKE_OUTPUT_DIR% -%CMAKECMD% %BLAST_ROOT_DIR% -G "Visual Studio 14 2015" -Ax64 -DTARGET_BUILD_PLATFORM=Windows -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%\lib\vc14win64-cmake\ -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win64-cmake\ -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win64-cmake\ -popd -if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% - - -GOTO :End - -:PM_PACKAGES_ROOT_UNDEFINED -ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree. -PAUSE -GOTO END - -:DONT_RUN_STEP_2 -ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead -PAUSE -GOTO END - -:End +@echo off
+
+echo #############################################################################################
+echo Starting %~n0 %date% %time%
+echo #############################################################################################
+
+echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION%
+
+if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2
+
+IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED
+
+REM Now set up the CMake command from PM_PACKAGES_ROOT
+
+SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe
+
+echo "Cmake: %CMAKECMD%"
+
+
+REM Generate projects here
+
+echo.
+echo #############################################################################################
+ECHO "Creating VS2015 Win64"
+
+SET CMAKE_OUTPUT_DIR="%~dp0..\compiler\vc14win64-cmake"
+IF EXIST %CMAKE_OUTPUT_DIR% rmdir /S /Q %CMAKE_OUTPUT_DIR%
+mkdir %CMAKE_OUTPUT_DIR%
+pushd %CMAKE_OUTPUT_DIR%
+%CMAKECMD% %BLAST_ROOT_DIR% -G "Visual Studio 14 2015" -Ax64 -DTARGET_BUILD_PLATFORM=Windows -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%\lib\vc14win64-cmake\ -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win64-cmake\ -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc14win64-cmake\
+popd
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+
+
+GOTO :End
+
+:PM_PACKAGES_ROOT_UNDEFINED
+ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree.
+PAUSE
+GOTO END
+
+:DONT_RUN_STEP_2
+ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead
+PAUSE
+GOTO END
+
+:End
diff --git a/buildtools/cmake_projects_vc15win64.bat b/buildtools/cmake_projects_vc15win64.bat new file mode 100755 index 0000000..2835077 --- /dev/null +++ b/buildtools/cmake_projects_vc15win64.bat @@ -0,0 +1,47 @@ +@echo off
+
+echo #############################################################################################
+echo Starting %~n0 %date% %time%
+echo #############################################################################################
+
+echo PM_CMakeModules_VERSION %PM_CMakeModules_VERSION%
+
+if NOT DEFINED PM_CMakeModules_VERSION GOTO DONT_RUN_STEP_2
+
+IF NOT DEFINED PM_PACKAGES_ROOT GOTO PM_PACKAGES_ROOT_UNDEFINED
+
+REM Now set up the CMake command from PM_PACKAGES_ROOT
+
+SET CMAKECMD=%PM_cmake_PATH%\bin\cmake.exe
+
+echo "Cmake: %CMAKECMD%"
+
+
+REM Generate projects here
+
+echo.
+echo #############################################################################################
+ECHO "Creating VS2017 Win64"
+
+SET CMAKE_OUTPUT_DIR="%~dp0..\compiler\vc15win64-cmake"
+IF EXIST %CMAKE_OUTPUT_DIR% rmdir /S /Q %CMAKE_OUTPUT_DIR%
+mkdir %CMAKE_OUTPUT_DIR%
+pushd %CMAKE_OUTPUT_DIR%
+%CMAKECMD% %BLAST_ROOT_DIR% -G "Visual Studio 15" -T v141 -Ax64 -DTARGET_BUILD_PLATFORM=Windows -DBL_LIB_OUTPUT_DIR=%BLAST_ROOT_DIR%\lib\vc15win64-cmake\ -DBL_DLL_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc15win64-cmake\ -DBL_EXE_OUTPUT_DIR=%BLAST_ROOT_DIR%\bin\vc15win64-cmake\
+popd
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+
+
+GOTO :End
+
+:PM_PACKAGES_ROOT_UNDEFINED
+ECHO PM_PACKAGES_ROOT has to be defined, pointing to the root of the dependency tree.
+PAUSE
+GOTO END
+
+:DONT_RUN_STEP_2
+ECHO Don't run this batch file directly. Run generate_projects_(platform).bat instead
+PAUSE
+GOTO END
+
+:End
diff --git a/buildtools/generate_projects_linux_ue4_crosscompile_step2.bat b/buildtools/generate_projects_linux_ue4_crosscompile_step2.bat deleted file mode 100644 index 7f2e550..0000000 --- a/buildtools/generate_projects_linux_ue4_crosscompile_step2.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off -:: Reset errorlevel status so we are not inheriting this state from the calling process: -@call :CLEAN_EXIT - -:: Run packman to ensure dependencies are present and run cmake generation script afterwards -@echo Running packman in preparation for cmake ... -@echo. - -:: We need this for NMake -@call "%VS140COMNTOOLS%VsdevCmd.bat" - -::Save this for when it's overwritten with the Linux one -set PM_cmake_PATH_Win=%PM_cmake_PATH% - -@call "%~dp0packman\packman.cmd" pull "%BLAST_ROOT_DIR%\dependencies.xml" --platform linux-UE4-cross --postscript "%~dp0cmake_projects_linux_ue4_crosscompile.bat" -@if %ERRORLEVEL% neq 0 ( - @exit /b %errorlevel% -) - -:CLEAN_EXIT -@exit /b 0
\ No newline at end of file diff --git a/buildtools/get_build_deps.cmd b/buildtools/get_build_deps.cmd new file mode 100755 index 0000000..2e87f50 --- /dev/null +++ b/buildtools/get_build_deps.cmd @@ -0,0 +1,8 @@ +@echo Getting build tool dependencies for %1 ...
+@call "%~dp0packman5\packman.cmd" pull "%~dp0build_platform_deps.xml" --platform %1
+@if %ERRORLEVEL% neq 0 (
+ @exit /b %errorlevel%
+) else (
+ @echo Done!
+)
+
diff --git a/buildtools/packager/formic/LICENSE.txt b/buildtools/packager/formic/LICENSE.txt index 39b0004..e685981 100644..100755 --- a/buildtools/packager/formic/LICENSE.txt +++ b/buildtools/packager/formic/LICENSE.txt @@ -1,619 +1,619 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. + GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
diff --git a/buildtools/packman/packman b/buildtools/packman/packman index a423f8a..124a92d 100755 --- a/buildtools/packman/packman +++ b/buildtools/packman/packman @@ -1,74 +1,74 @@ -#!/bin/bash - -PM_PACKMAN_VERSION=4.0.1 - -# Specify where configuration file could exist -export PM_CONFIG_PATH=$(dirname ${BASH_SOURCE})/packman_config.txt - -# The packages root may already be configured by the user -if [ -z "$PM_PACKAGES_ROOT" ]; then - # Set variable permanently using .profile for this user - echo "export PM_PACKAGES_ROOT=\$HOME/packman-repo" >> ~/.profile - # Set variable temporarily in this process so that the following execution will work - export PM_PACKAGES_ROOT="${HOME}/packman-repo" -fi - -# Ensure the packages root path exists: -if [ ! -d "$PM_PACKAGES_ROOT" ]; then - echo "Creating packman packages repository at $PM_PACKAGES_ROOT" - mkdir -p "$PM_PACKAGES_ROOT" -fi - -# The packman module may be externally configured -if [ -z "$PM_MODULE_EXT" ]; then - PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman/$PM_PACKMAN_VERSION-common" - export PM_MODULE="$PM_MODULE_DIR/packman.py" -else - export PM_MODULE="$PM_MODULE_EXT" -fi - -fetch_file_from_s3() -{ - SOURCE=$1 - SOURCE_URL=http://packman.s3.amazonaws.com/$SOURCE - TARGET=$2 - echo "Fetching $SOURCE from S3 ..." - if command -v wget >/dev/null 2>&1; then - wget --quiet -O$TARGET $SOURCE_URL - else - curl -o $TARGET $SOURCE_URL -s -S - fi -} - -# Ensure the packman package exists: -if [ ! -f "$PM_MODULE" ]; then - PM_MODULE_PACKAGE="packman@$PM_PACKMAN_VERSION-common.zip" - TARGET="/tmp/$PM_MODULE_PACKAGE" - # We always fetch packman from S3: - fetch_file_from_s3 $PM_MODULE_PACKAGE $TARGET - if [ "$?" -eq "0" ]; then - echo "Unpacking ..." - mkdir -p "$PM_MODULE_DIR" - unzip -q $TARGET -d "$PM_MODULE_DIR" - rm $TARGET - else - echo "Failure while fetching packman module from S3!" - exit 1 - fi -fi - -# Generate temporary file name for environment variables: -PM_VAR_PATH=`mktemp -u -t tmp.XXXXX.$$.pmvars` - -python "$PM_MODULE" $* --var-path="$PM_VAR_PATH" - -# Export the variables if the file was used and remove the file: -if [ -f "$PM_VAR_PATH" ]; then - while read -r line - do - if [ ${#line} -gt 0 ]; then - export "$line" - fi - done < "$PM_VAR_PATH" - rm -f "$PM_VAR_PATH" -fi +#!/bin/bash
+
+PM_PACKMAN_VERSION=4.0.1
+
+# Specify where configuration file could exist
+export PM_CONFIG_PATH=$(dirname ${BASH_SOURCE})/packman_config.txt
+
+# The packages root may already be configured by the user
+if [ -z "$PM_PACKAGES_ROOT" ]; then
+ # Set variable permanently using .profile for this user
+ echo "export PM_PACKAGES_ROOT=\$HOME/packman-repo" >> ~/.profile
+ # Set variable temporarily in this process so that the following execution will work
+ export PM_PACKAGES_ROOT="${HOME}/packman-repo"
+fi
+
+# Ensure the packages root path exists:
+if [ ! -d "$PM_PACKAGES_ROOT" ]; then
+ echo "Creating packman packages repository at $PM_PACKAGES_ROOT"
+ mkdir -p "$PM_PACKAGES_ROOT"
+fi
+
+# The packman module may be externally configured
+if [ -z "$PM_MODULE_EXT" ]; then
+ PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman/$PM_PACKMAN_VERSION-common"
+ export PM_MODULE="$PM_MODULE_DIR/packman.py"
+else
+ export PM_MODULE="$PM_MODULE_EXT"
+fi
+
+fetch_file_from_s3()
+{
+ SOURCE=$1
+ SOURCE_URL=http://packman.s3.amazonaws.com/$SOURCE
+ TARGET=$2
+ echo "Fetching $SOURCE from S3 ..."
+ if command -v wget >/dev/null 2>&1; then
+ wget --quiet -O$TARGET $SOURCE_URL
+ else
+ curl -o $TARGET $SOURCE_URL -s -S
+ fi
+}
+
+# Ensure the packman package exists:
+if [ ! -f "$PM_MODULE" ]; then
+ PM_MODULE_PACKAGE="packman@$PM_PACKMAN_VERSION-common.zip"
+ TARGET="/tmp/$PM_MODULE_PACKAGE"
+ # We always fetch packman from S3:
+ fetch_file_from_s3 $PM_MODULE_PACKAGE $TARGET
+ if [ "$?" -eq "0" ]; then
+ echo "Unpacking ..."
+ mkdir -p "$PM_MODULE_DIR"
+ unzip -q $TARGET -d "$PM_MODULE_DIR"
+ rm $TARGET
+ else
+ echo "Failure while fetching packman module from S3!"
+ exit 1
+ fi
+fi
+
+# Generate temporary file name for environment variables:
+PM_VAR_PATH=`mktemp -u -t tmp.XXXXX.$$.pmvars`
+
+python "$PM_MODULE" $* --var-path="$PM_VAR_PATH"
+
+# Export the variables if the file was used and remove the file:
+if [ -f "$PM_VAR_PATH" ]; then
+ while read -r line
+ do
+ if [ ${#line} -gt 0 ]; then
+ export "$line"
+ fi
+ done < "$PM_VAR_PATH"
+ rm -f "$PM_VAR_PATH"
+fi
diff --git a/buildtools/packman/packman.cmd b/buildtools/packman/packman.cmd index 03e2cf8..fefdc4f 100644..100755 --- a/buildtools/packman/packman.cmd +++ b/buildtools/packman/packman.cmd @@ -1,41 +1,41 @@ -:: Reset errorlevel status so we are not inheriting this state from the calling process: -@call :RESET_ERROR -:: You can remove the call below if you do your own manual configuration of the dev machines -@call "%~dp0\win-bootstrap\configure.bat" -@if errorlevel 1 exit /b 1 -:: Everything below is mandatory -@if not defined PM_PYTHON goto :PYTHON_ENV_ERROR -@if not defined PM_MODULE goto :MODULE_ENV_ERROR - -:: Generate temporary path for variable file -:TEMP_VAR_PATH_LOOP -@set "PM_VAR_PATH=%tmp%\tmp.%RANDOM%.pmvars" -@if exist "%PM_VAR_PATH%" goto :TEMP_VAR_PATH_LOOP - -@"%PM_PYTHON%" "%PM_MODULE%" %* --var-path="%PM_VAR_PATH%" -@if errorlevel 1 goto :eof - -:: Marshall environment variables into the current environment if they have been generated and remove temporary file -@if exist "%PM_VAR_PATH%" ( - @for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do @set "%%A" - @if errorlevel 1 goto :VAR_ERROR - @del /F "%PM_VAR_PATH%" -) -@set PM_VAR_PATH= -@goto :eof - -:: Subroutines below -:PYTHON_ENV_ERROR -@echo User environment variable PM_PYTHON is not set! Please configure machine for packman or call configure.bat. -@exit /b 1 - -:MODULE_ENV_ERROR -@echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat. -@exit /b 1 - -:VAR_ERROR -@echo Error while processing and setting environment variables! -@exit /b 1 - -:RESET_ERROR +:: Reset errorlevel status so we are not inheriting this state from the calling process:
+@call :RESET_ERROR
+:: You can remove the call below if you do your own manual configuration of the dev machines
+@call "%~dp0\win-bootstrap\configure.bat"
+@if errorlevel 1 exit /b 1
+:: Everything below is mandatory
+@if not defined PM_PYTHON goto :PYTHON_ENV_ERROR
+@if not defined PM_MODULE goto :MODULE_ENV_ERROR
+
+:: Generate temporary path for variable file
+:TEMP_VAR_PATH_LOOP
+@set "PM_VAR_PATH=%tmp%\tmp.%RANDOM%.pmvars"
+@if exist "%PM_VAR_PATH%" goto :TEMP_VAR_PATH_LOOP
+
+@"%PM_PYTHON%" "%PM_MODULE%" %* --var-path="%PM_VAR_PATH%"
+@if errorlevel 1 goto :eof
+
+:: Marshall environment variables into the current environment if they have been generated and remove temporary file
+@if exist "%PM_VAR_PATH%" (
+ @for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do @set "%%A"
+ @if errorlevel 1 goto :VAR_ERROR
+ @del /F "%PM_VAR_PATH%"
+)
+@set PM_VAR_PATH=
+@goto :eof
+
+:: Subroutines below
+:PYTHON_ENV_ERROR
+@echo User environment variable PM_PYTHON is not set! Please configure machine for packman or call configure.bat.
+@exit /b 1
+
+:MODULE_ENV_ERROR
+@echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat.
+@exit /b 1
+
+:VAR_ERROR
+@echo Error while processing and setting environment variables!
+@exit /b 1
+
+:RESET_ERROR
@exit /b 0
\ No newline at end of file diff --git a/buildtools/packman/packman_config.txt b/buildtools/packman/packman_config.txt index d090b8a..2741ed2 100644..100755 --- a/buildtools/packman/packman_config.txt +++ b/buildtools/packman/packman_config.txt @@ -1,3 +1,3 @@ -PM_PACKAGES_SOURCE=s3 -PM_S3_READ_KEY_ID=AKIAJHPSPBMWMTZS6TJA -PM_S3_READ_SECRET_KEY=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 +PM_PACKAGES_SOURCE=s3
+PM_S3_READ_KEY_ID=AKIAJHPSPBMWMTZS6TJA
+PM_S3_READ_SECRET_KEY=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
diff --git a/buildtools/packman/packmanapi.py b/buildtools/packman/packmanapi.py index 6475f9d..76e20d0 100644..100755 --- a/buildtools/packman/packmanapi.py +++ b/buildtools/packman/packmanapi.py @@ -1,16 +1,16 @@ -import os -import sys - - -def get_packman_module_dir(): - root_dir = os.environ['PM_PACKAGES_ROOT'] - common_dir = '4.0.1-common' - module_dir = os.path.join(root_dir, 'packman', common_dir) - return module_dir - - -sys.path.insert(0, get_packman_module_dir()) -from packman import pack -from packman import push -from packager import get_package_filename -from packager import create_package_from_file_list +import os
+import sys
+
+
+def get_packman_module_dir():
+ root_dir = os.environ['PM_PACKAGES_ROOT']
+ common_dir = '4.0.1-common'
+ module_dir = os.path.join(root_dir, 'packman', common_dir)
+ return module_dir
+
+
+sys.path.insert(0, get_packman_module_dir())
+from packman import pack
+from packman import push
+from packager import get_package_filename
+from packager import create_package_from_file_list
diff --git a/buildtools/packman/win-bootstrap/configure.bat b/buildtools/packman/win-bootstrap/configure.bat index 7963ac2..2533d63 100644..100755 --- a/buildtools/packman/win-bootstrap/configure.bat +++ b/buildtools/packman/win-bootstrap/configure.bat @@ -1,104 +1,104 @@ -@set PM_PACKMAN_VERSION=4.0.1 - -:: Specify where config file could exist -@set PM_CONFIG_PATH=%~dp0..\packman_config.txt - -:: The external root may already be configured and we should do minimal work in that case -@if defined PM_PACKAGES_ROOT goto ENSURE_DIR - -:: If the folder isn't set we assume that the best place for it is on the drive that we are currently -:: running from -@set PM_DRIVE=%CD:~0,2% - -@set PM_PACKAGES_ROOT=%PM_DRIVE%\packman-repo - -:: We use *setx* here so that the variable is persisted in the user environment -@echo Setting user environment variable PM_PACKAGES_ROOT to %PM_PACKAGES_ROOT% -@setx PM_PACKAGES_ROOT %PM_PACKAGES_ROOT% -@if errorlevel 1 goto ERROR - -:: The above doesn't work properly from a build step in VisualStudio because a separate process is -:: spawned for it so it will be lost for subsequent compilation steps - VisualStudio must -:: be launched from a new process. We catch this odd-ball case here: -@if defined VSLANG goto ERROR_IN_VS_WITH_NO_ROOT_DEFINED - -:: Check for the directory that we need. Note that mkdir will create any directories -:: that may be needed in the path -:ENSURE_DIR -@if not exist "%PM_PACKAGES_ROOT%" ( - @echo Creating directory %PM_PACKAGES_ROOT% - @mkdir "%PM_PACKAGES_ROOT%" - @if errorlevel 1 goto ERROR_MKDIR_PACKAGES_ROOT -) - -:: The Python interpreter may already be externally configured -@if defined PM_PYTHON_EXT ( - @set PM_PYTHON=%PM_PYTHON_EXT% - @goto PACKMAN -) - -@set PM_PYTHON_DIR=%PM_PACKAGES_ROOT%\python\2.7.6-windows-x86 -@set PM_PYTHON=%PM_PYTHON_DIR%\python.exe - -@if exist "%PM_PYTHON%" goto PACKMAN - -@set [email protected] -@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a -@set TARGET=%TEMP_FILE_NAME%.exe -@call "%~dp0fetch_file_from_s3.cmd" %PM_PYTHON_PACKAGE% %TARGET% -@if errorlevel 1 goto ERROR - -@echo Unpacking ... -@%TARGET% -o"%PM_PYTHON_DIR%" -y 1> nul -@if errorlevel 1 goto ERROR - -@del %TARGET% - -:PACKMAN -:: The packman module may already be externally configured -@if defined PM_MODULE_EXT ( - @set PM_MODULE=%PM_MODULE_EXT% - @goto END -) - -@set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman\%PM_PACKMAN_VERSION%-common -@set PM_MODULE=%PM_MODULE_DIR%\packman.py - -@if exist "%PM_MODULE%" goto END - -@set PM_MODULE_PACKAGE=packman@%PM_PACKMAN_VERSION%-common.zip -@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a -@set TARGET=%TEMP_FILE_NAME% -@call "%~dp0fetch_file_from_s3.cmd" %PM_MODULE_PACKAGE% %TARGET% -@if errorlevel 1 goto ERROR - -@echo Unpacking ... -@"%PM_PYTHON%" "%~dp0\install_package.py" %TARGET% "%PM_MODULE_DIR%" -@if errorlevel 1 goto ERROR - -@del %TARGET% - -@goto END - -:ERROR_IN_VS_WITH_NO_ROOT_DEFINED -@echo The above is a once-per-computer operation. Unfortunately VisualStudio cannot pick up environment change -@echo unless *VisualStudio is RELAUNCHED*. -@echo NOTE: If you are launching VisualStudio from command line or command line utility make sure -@echo you have a fresh environment (relaunch the command line or utility). -@echo. -@exit /B 1 - -:ERROR_MKDIR_PACKAGES_ROOT -@echo Failed to automatically create packman packages repo at %PM_PACKAGES_ROOT%. -@echo Please set a location explicitly that packman has permission to write to, by issuing: -@echo. -@echo setx PM_PACKAGES_ROOT {path-you-choose-for-storing-packman-packages-locally} -@echo. -@echo Then launch a new command console for the changes to take effect and run packman command again. -@exit /B 1 - -:ERROR -@echo !!! Failure while configuring local machine :( !!! -@exit /B 1 - -:END +@set PM_PACKMAN_VERSION=4.0.1
+
+:: Specify where config file could exist
+@set PM_CONFIG_PATH=%~dp0..\packman_config.txt
+
+:: The external root may already be configured and we should do minimal work in that case
+@if defined PM_PACKAGES_ROOT goto ENSURE_DIR
+
+:: If the folder isn't set we assume that the best place for it is on the drive that we are currently
+:: running from
+@set PM_DRIVE=%CD:~0,2%
+
+@set PM_PACKAGES_ROOT=%PM_DRIVE%\packman-repo
+
+:: We use *setx* here so that the variable is persisted in the user environment
+@echo Setting user environment variable PM_PACKAGES_ROOT to %PM_PACKAGES_ROOT%
+@setx PM_PACKAGES_ROOT %PM_PACKAGES_ROOT%
+@if errorlevel 1 goto ERROR
+
+:: The above doesn't work properly from a build step in VisualStudio because a separate process is
+:: spawned for it so it will be lost for subsequent compilation steps - VisualStudio must
+:: be launched from a new process. We catch this odd-ball case here:
+@if defined VSLANG goto ERROR_IN_VS_WITH_NO_ROOT_DEFINED
+
+:: Check for the directory that we need. Note that mkdir will create any directories
+:: that may be needed in the path
+:ENSURE_DIR
+@if not exist "%PM_PACKAGES_ROOT%" (
+ @echo Creating directory %PM_PACKAGES_ROOT%
+ @mkdir "%PM_PACKAGES_ROOT%"
+ @if errorlevel 1 goto ERROR_MKDIR_PACKAGES_ROOT
+)
+
+:: The Python interpreter may already be externally configured
+@if defined PM_PYTHON_EXT (
+ @set PM_PYTHON=%PM_PYTHON_EXT%
+ @goto PACKMAN
+)
+
+@set PM_PYTHON_DIR=%PM_PACKAGES_ROOT%\python\2.7.6-windows-x86
+@set PM_PYTHON=%PM_PYTHON_DIR%\python.exe
+
+@if exist "%PM_PYTHON%" goto PACKMAN
+
+@set [email protected]
+@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
+@set TARGET=%TEMP_FILE_NAME%.exe
+@call "%~dp0fetch_file_from_s3.cmd" %PM_PYTHON_PACKAGE% %TARGET%
+@if errorlevel 1 goto ERROR
+
+@echo Unpacking ...
+@%TARGET% -o"%PM_PYTHON_DIR%" -y 1> nul
+@if errorlevel 1 goto ERROR
+
+@del %TARGET%
+
+:PACKMAN
+:: The packman module may already be externally configured
+@if defined PM_MODULE_EXT (
+ @set PM_MODULE=%PM_MODULE_EXT%
+ @goto END
+)
+
+@set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman\%PM_PACKMAN_VERSION%-common
+@set PM_MODULE=%PM_MODULE_DIR%\packman.py
+
+@if exist "%PM_MODULE%" goto END
+
+@set PM_MODULE_PACKAGE=packman@%PM_PACKMAN_VERSION%-common.zip
+@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
+@set TARGET=%TEMP_FILE_NAME%
+@call "%~dp0fetch_file_from_s3.cmd" %PM_MODULE_PACKAGE% %TARGET%
+@if errorlevel 1 goto ERROR
+
+@echo Unpacking ...
+@"%PM_PYTHON%" "%~dp0\install_package.py" %TARGET% "%PM_MODULE_DIR%"
+@if errorlevel 1 goto ERROR
+
+@del %TARGET%
+
+@goto END
+
+:ERROR_IN_VS_WITH_NO_ROOT_DEFINED
+@echo The above is a once-per-computer operation. Unfortunately VisualStudio cannot pick up environment change
+@echo unless *VisualStudio is RELAUNCHED*.
+@echo NOTE: If you are launching VisualStudio from command line or command line utility make sure
+@echo you have a fresh environment (relaunch the command line or utility).
+@echo.
+@exit /B 1
+
+:ERROR_MKDIR_PACKAGES_ROOT
+@echo Failed to automatically create packman packages repo at %PM_PACKAGES_ROOT%.
+@echo Please set a location explicitly that packman has permission to write to, by issuing:
+@echo.
+@echo setx PM_PACKAGES_ROOT {path-you-choose-for-storing-packman-packages-locally}
+@echo.
+@echo Then launch a new command console for the changes to take effect and run packman command again.
+@exit /B 1
+
+:ERROR
+@echo !!! Failure while configuring local machine :( !!!
+@exit /B 1
+
+:END
diff --git a/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd b/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd index 974d5ec..7f91a47 100644..100755 --- a/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd +++ b/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd @@ -1,19 +1,19 @@ -:: You need to specify <package-name> <target-name> as input to this command - -@set PACKAGE_NAME=%1 -@set TARGET=%2 - -@echo Fetching %PACKAGE_NAME% from s3 ... - -@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_s3.ps1" -sourceName %PACKAGE_NAME% -output %TARGET% -:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option -:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes: -@if not exist %TARGET% goto ERROR_DOWNLOAD_FAILED -@if %~z2==0 goto ERROR_DOWNLOAD_FAILED - -@exit /b 0 - -:ERROR_DOWNLOAD_FAILED -@echo Failed to download file from %1 -@echo Most likely because endpoint cannot be reached (VPN connection down?) +:: You need to specify <package-name> <target-name> as input to this command
+
+@set PACKAGE_NAME=%1
+@set TARGET=%2
+
+@echo Fetching %PACKAGE_NAME% from s3 ...
+
+@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_s3.ps1" -sourceName %PACKAGE_NAME% -output %TARGET%
+:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option
+:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes:
+@if not exist %TARGET% goto ERROR_DOWNLOAD_FAILED
+@if %~z2==0 goto ERROR_DOWNLOAD_FAILED
+
+@exit /b 0
+
+:ERROR_DOWNLOAD_FAILED
+@echo Failed to download file from %1
+@echo Most likely because endpoint cannot be reached (VPN connection down?)
@exit /b 1
\ No newline at end of file diff --git a/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 b/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 index fc588d9..132fe0d 100644..100755 --- a/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 +++ b/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 @@ -1,60 +1,60 @@ -param( -[Parameter(Mandatory=$true)][string]$sourceName=$null, -[string]$output="out.exe" -) -$source = "http://packman.s3.amazonaws.com/" + $sourceName -$filename = $output - -$triesLeft = 3 - -do -{ - $triesLeft -= 1 - $req = [System.Net.httpwebrequest]::Create($source) - $req.cookiecontainer = New-Object System.net.CookieContainer - - try - { - Write-Host "Connecting to S3 ..." - $res = $req.GetResponse() - if($res.StatusCode -eq "OK") { - Write-Host "Downloading ..." - [int]$goal = $res.ContentLength - $reader = $res.GetResponseStream() - $writer = new-object System.IO.FileStream $fileName, "Create" - [byte[]]$buffer = new-object byte[] 4096 - [int]$total = [int]$count = 0 - do - { - $count = $reader.Read($buffer, 0, $buffer.Length); - $writer.Write($buffer, 0, $count); - $total += $count - if($goal -gt 0) { - Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100) - } else { - Write-Progress "Downloading $url" "Saving $total bytes..." -id 0 - } - } while ($count -gt 0) - - $triesLeft = 0 - } - } - catch - { - Write-Host "Error connecting to S3!" - Write-Host $_.Exception|format-list -force - } - finally - { - if ($reader) - { - $reader.Close() - } - if ($writer) - { - $writer.Flush() - $writer.Close() - } - } -} while ($triesLeft -gt 0) - +param(
+[Parameter(Mandatory=$true)][string]$sourceName=$null,
+[string]$output="out.exe"
+)
+$source = "http://packman.s3.amazonaws.com/" + $sourceName
+$filename = $output
+
+$triesLeft = 3
+
+do
+{
+ $triesLeft -= 1
+ $req = [System.Net.httpwebrequest]::Create($source)
+ $req.cookiecontainer = New-Object System.net.CookieContainer
+
+ try
+ {
+ Write-Host "Connecting to S3 ..."
+ $res = $req.GetResponse()
+ if($res.StatusCode -eq "OK") {
+ Write-Host "Downloading ..."
+ [int]$goal = $res.ContentLength
+ $reader = $res.GetResponseStream()
+ $writer = new-object System.IO.FileStream $fileName, "Create"
+ [byte[]]$buffer = new-object byte[] 4096
+ [int]$total = [int]$count = 0
+ do
+ {
+ $count = $reader.Read($buffer, 0, $buffer.Length);
+ $writer.Write($buffer, 0, $count);
+ $total += $count
+ if($goal -gt 0) {
+ Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
+ } else {
+ Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
+ }
+ } while ($count -gt 0)
+
+ $triesLeft = 0
+ }
+ }
+ catch
+ {
+ Write-Host "Error connecting to S3!"
+ Write-Host $_.Exception|format-list -force
+ }
+ finally
+ {
+ if ($reader)
+ {
+ $reader.Close()
+ }
+ if ($writer)
+ {
+ $writer.Flush()
+ $writer.Close()
+ }
+ }
+} while ($triesLeft -gt 0)
+
diff --git a/buildtools/packman/win-bootstrap/fetch_file_from_url.ps1 b/buildtools/packman/win-bootstrap/fetch_file_from_url.ps1 index 5b566f1..b9cb23c 100644..100755 --- a/buildtools/packman/win-bootstrap/fetch_file_from_url.ps1 +++ b/buildtools/packman/win-bootstrap/fetch_file_from_url.ps1 @@ -1,37 +1,37 @@ -param( -[Parameter(Mandatory=$true)][string]$sourceUrl=$null, -[Parameter(Mandatory=$true)][string]$output=$null -) -$source = $sourceUrl -$filename = $output - -$req = [System.Net.httpwebrequest]::Create($source) -$req.cookiecontainer = New-Object System.net.CookieContainer - -Write-Host "Connecting to $source ..." -$res = $req.GetResponse() - -if($res.StatusCode -eq "OK") { - Write-Host "Downloading ..." - [int]$goal = $res.ContentLength - $reader = $res.GetResponseStream() - $writer = new-object System.IO.FileStream $fileName, "Create" - [byte[]]$buffer = new-object byte[] 4096 - [int]$total = [int]$count = 0 - do - { - $count = $reader.Read($buffer, 0, $buffer.Length); - $writer.Write($buffer, 0, $count); - $total += $count - if($goal -gt 0) { - Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100) - } else { - Write-Progress "Downloading $url" "Saving $total bytes..." -id 0 - } - } while ($count -gt 0) - - $reader.Close() - $writer.Flush() - $writer.Close() -} - +param(
+[Parameter(Mandatory=$true)][string]$sourceUrl=$null,
+[Parameter(Mandatory=$true)][string]$output=$null
+)
+$source = $sourceUrl
+$filename = $output
+
+$req = [System.Net.httpwebrequest]::Create($source)
+$req.cookiecontainer = New-Object System.net.CookieContainer
+
+Write-Host "Connecting to $source ..."
+$res = $req.GetResponse()
+
+if($res.StatusCode -eq "OK") {
+ Write-Host "Downloading ..."
+ [int]$goal = $res.ContentLength
+ $reader = $res.GetResponseStream()
+ $writer = new-object System.IO.FileStream $fileName, "Create"
+ [byte[]]$buffer = new-object byte[] 4096
+ [int]$total = [int]$count = 0
+ do
+ {
+ $count = $reader.Read($buffer, 0, $buffer.Length);
+ $writer.Write($buffer, 0, $count);
+ $total += $count
+ if($goal -gt 0) {
+ Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
+ } else {
+ Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
+ }
+ } while ($count -gt 0)
+
+ $reader.Close()
+ $writer.Flush()
+ $writer.Close()
+}
+
diff --git a/buildtools/packman/win-bootstrap/generate_temp_file_name.ps1 b/buildtools/packman/win-bootstrap/generate_temp_file_name.ps1 index cefbda4..a8c9c1b 100644..100755 --- a/buildtools/packman/win-bootstrap/generate_temp_file_name.ps1 +++ b/buildtools/packman/win-bootstrap/generate_temp_file_name.ps1 @@ -1,2 +1,2 @@ -$out = [System.IO.Path]::GetTempFileName() +$out = [System.IO.Path]::GetTempFileName()
Write-Host $out
\ No newline at end of file diff --git a/buildtools/packman/win-bootstrap/install_package.py b/buildtools/packman/win-bootstrap/install_package.py index 730962a..3aa294e 100644..100755 --- a/buildtools/packman/win-bootstrap/install_package.py +++ b/buildtools/packman/win-bootstrap/install_package.py @@ -1,39 +1,39 @@ -import logging -import zipfile -import tempfile -import sys -import shutil - -__author__ = 'hfannar' -logging.basicConfig(level=logging.WARNING, format="%(message)s") -logger = logging.getLogger('install_package') - - -class TemporaryDirectory: - def __init__(self): - self.path = None - - def __enter__(self): - self.path = tempfile.mkdtemp() - return self.path - - def __exit__(self, type, value, traceback ): - # Remove temporary data created - shutil.rmtree(self.path) - - -def install_package(package_src_path, package_dst_path): - with zipfile.ZipFile(package_src_path, allowZip64=True) as zip_file, TemporaryDirectory() as temp_dir: - zip_file.extractall(temp_dir) - # Recursively copy (temp_dir will be automatically cleaned up on exit) - try: - # Recursive copy is needed because both package name and version folder could be missing in - # target directory: - shutil.copytree(temp_dir, package_dst_path) - except OSError, exc: - logger.warning("Directory %s already present, packaged installation aborted" % package_dst_path) - else: - logger.info("Package successfully installed to %s" % package_dst_path) - - +import logging
+import zipfile
+import tempfile
+import sys
+import shutil
+
+__author__ = 'hfannar'
+logging.basicConfig(level=logging.WARNING, format="%(message)s")
+logger = logging.getLogger('install_package')
+
+
+class TemporaryDirectory:
+ def __init__(self):
+ self.path = None
+
+ def __enter__(self):
+ self.path = tempfile.mkdtemp()
+ return self.path
+
+ def __exit__(self, type, value, traceback ):
+ # Remove temporary data created
+ shutil.rmtree(self.path)
+
+
+def install_package(package_src_path, package_dst_path):
+ with zipfile.ZipFile(package_src_path, allowZip64=True) as zip_file, TemporaryDirectory() as temp_dir:
+ zip_file.extractall(temp_dir)
+ # Recursively copy (temp_dir will be automatically cleaned up on exit)
+ try:
+ # Recursive copy is needed because both package name and version folder could be missing in
+ # target directory:
+ shutil.copytree(temp_dir, package_dst_path)
+ except OSError, exc:
+ logger.warning("Directory %s already present, packaged installation aborted" % package_dst_path)
+ else:
+ logger.info("Package successfully installed to %s" % package_dst_path)
+
+
install_package(sys.argv[1], sys.argv[2])
\ No newline at end of file diff --git a/buildtools/packman5/config.packman.xml b/buildtools/packman5/config.packman.xml new file mode 100755 index 0000000..6a6da46 --- /dev/null +++ b/buildtools/packman5/config.packman.xml @@ -0,0 +1,3 @@ +<config remotes="cloudfront"> + <remote name="cloudfront" packageLocation="d4i3qtqj3r0z5.cloudfront.net/${name}@${version}" type="https" /> + </config>
\ No newline at end of file diff --git a/buildtools/packman5/packman b/buildtools/packman5/packman new file mode 100755 index 0000000..0b10d9e --- /dev/null +++ b/buildtools/packman5/packman @@ -0,0 +1,99 @@ +#!/bin/bash
+
+PM_PACKMAN_VERSION=5.2.1
+
+# Specify where packman command exists
+export PM_INSTALL_PATH=$(dirname ${BASH_SOURCE})
+
+# The packages root may already be configured by the user
+if [ -z "$PM_PACKAGES_ROOT" ]; then
+ # Set variable permanently using .profile for this user
+ echo "export PM_PACKAGES_ROOT=\$HOME/packman-repo" >> ~/.profile
+ # Set variable temporarily in this process so that the following execution will work
+ export PM_PACKAGES_ROOT="${HOME}/packman-repo"
+fi
+
+# Ensure the packages root path exists:
+if [ ! -d "$PM_PACKAGES_ROOT" ]; then
+ echo "Creating packman packages repository at $PM_PACKAGES_ROOT"
+ mkdir -p "$PM_PACKAGES_ROOT"
+fi
+
+# The packman module may be externally configured
+if [ -z "$PM_MODULE_EXT" ]; then
+ PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman-common/$PM_PACKMAN_VERSION"
+ export PM_MODULE="$PM_MODULE_DIR/packman.py"
+else
+ export PM_MODULE="$PM_MODULE_EXT"
+fi
+
+fetch_file_from_s3()
+{
+ SOURCE=$1
+ SOURCE_URL=http://packman.s3.amazonaws.com/$SOURCE
+ TARGET=$2
+ echo "Fetching $SOURCE from S3 ..."
+ if command -v wget >/dev/null 2>&1; then
+ wget --quiet -O$TARGET $SOURCE_URL
+ else
+ curl -o $TARGET $SOURCE_URL -s -S
+ fi
+}
+
+# Ensure the packman package exists:
+if [ ! -f "$PM_MODULE" ]; then
+ PM_MODULE_PACKAGE="packman-common@$PM_PACKMAN_VERSION.zip"
+ TARGET="/tmp/$PM_MODULE_PACKAGE"
+ # We always fetch packman from S3:
+ fetch_file_from_s3 $PM_MODULE_PACKAGE $TARGET
+ if [ "$?" -eq "0" ]; then
+ echo "Unpacking ..."
+ mkdir -p "$PM_MODULE_DIR"
+ unzip -q $TARGET -d "$PM_MODULE_DIR"
+ rm $TARGET
+ else
+ echo "Failure while fetching packman module from S3!"
+ exit 1
+ fi
+fi
+
+# For now assume python is installed on the box and we just need to find it
+if command -v python2.7 >/dev/null 2>&1; then
+ export PM_PYTHON=python2.7
+elif command -v python2 >/dev/null 2>&1; then
+ export PM_PYTHON=python2
+else
+ export PM_PYTHON=python
+fi
+
+# Ensure 7za package exists:
+PM_7za_VERSION=16.02.2
+export PM_7za_PATH="$PM_PACKAGES_ROOT/chk/7za/$PM_7za_VERSION"
+if [ ! -f "$PM_7za_PATH" ]; then
+ $PM_PYTHON "$PM_MODULE" install 7za $PM_7za_VERSION -r packman:cloudfront
+ if [ "$?" -ne 0 ]; then
+ echo "Failure while installing required 7za package"
+ exit 1
+ fi
+fi
+
+# Generate temporary file name for environment variables:
+PM_VAR_PATH=`mktemp -u -t tmp.XXXXX.$$.pmvars`
+
+$PM_PYTHON -u "$PM_MODULE" $* --var-path="$PM_VAR_PATH"
+exit_code=$?
+# Export the variables if the file was used and remove the file:
+if [ -f "$PM_VAR_PATH" ]; then
+ while read -r line
+ do
+ if [ ${#line} -gt 0 ]; then
+ export "$line"
+ fi
+ done < "$PM_VAR_PATH"
+ rm -f "$PM_VAR_PATH"
+fi
+
+# Return the exit code from python
+if [ "$exit_code" != 0 ]; then
+ exit "$exit_code"
+fi
diff --git a/buildtools/packman5/packman.cmd b/buildtools/packman5/packman.cmd new file mode 100755 index 0000000..ae7b495 --- /dev/null +++ b/buildtools/packman5/packman.cmd @@ -0,0 +1,40 @@ +:: Reset errorlevel status so we are not inheriting this state from the calling process:
+@call :RESET_ERROR
+:: You can remove the call below if you do your own manual configuration of the dev machines
+@call "%~dp0\win-bootstrap\configure.bat"
+@if errorlevel 1 exit /b 1
+:: Everything below is mandatory
+@if not defined PM_PYTHON goto :PYTHON_ENV_ERROR
+@if not defined PM_MODULE goto :MODULE_ENV_ERROR
+
+:: Generate temporary path for variable file
+@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile ^
+-File "%~dp0win-bootstrap\generate_temp_file_name.ps1"') do @set PM_VAR_PATH=%%a
+
+@"%PM_PYTHON%" -u "%PM_MODULE%" %* --var-path="%PM_VAR_PATH%"
+@if errorlevel 1 goto :eof
+
+:: Marshall environment variables into the current environment if they have been generated and remove temporary file
+@if exist "%PM_VAR_PATH%" (
+ @for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do @set "%%A"
+ @if errorlevel 1 goto :VAR_ERROR
+ @del /F "%PM_VAR_PATH%"
+)
+@set PM_VAR_PATH=
+@goto :eof
+
+:: Subroutines below
+:PYTHON_ENV_ERROR
+@echo User environment variable PM_PYTHON is not set! Please configure machine for packman or call configure.bat.
+@exit /b 1
+
+:MODULE_ENV_ERROR
+@echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat.
+@exit /b 1
+
+:VAR_ERROR
+@echo Error while processing and setting environment variables!
+@exit /b 1
+
+:RESET_ERROR
+@exit /b 0
\ No newline at end of file diff --git a/buildtools/packman5/win-bootstrap/configure.bat b/buildtools/packman5/win-bootstrap/configure.bat new file mode 100755 index 0000000..a38f697 --- /dev/null +++ b/buildtools/packman5/win-bootstrap/configure.bat @@ -0,0 +1,112 @@ +@set PM_PACKMAN_VERSION=5.2.1
+
+:: Specify where packman command is rooted
+@set PM_INSTALL_PATH=%~dp0..
+
+:: The external root may already be configured and we should do minimal work in that case
+@if defined PM_PACKAGES_ROOT goto ENSURE_DIR
+
+:: If the folder isn't set we assume that the best place for it is on the drive that we are currently
+:: running from
+@set PM_DRIVE=%CD:~0,2%
+
+@set PM_PACKAGES_ROOT=%PM_DRIVE%\packman-repo
+
+:: We use *setx* here so that the variable is persisted in the user environment
+@echo Setting user environment variable PM_PACKAGES_ROOT to %PM_PACKAGES_ROOT%
+@setx PM_PACKAGES_ROOT %PM_PACKAGES_ROOT%
+@if errorlevel 1 goto ERROR
+
+:: The above doesn't work properly from a build step in VisualStudio because a separate process is
+:: spawned for it so it will be lost for subsequent compilation steps - VisualStudio must
+:: be launched from a new process. We catch this odd-ball case here:
+@if defined PM_DISABLE_VS_WARNING goto ENSURE_DIR
+@if not defined VSLANG goto ENSURE_DIR
+@echo The above is a once-per-computer operation. Unfortunately VisualStudio cannot pick up environment change
+@echo unless *VisualStudio is RELAUNCHED*.
+@echo If you are launching VisualStudio from command line or command line utility make sure
+@echo you have a fresh launch environment (relaunch the command line or utility).
+@echo If you are using 'linkPath' and referring to packages via local folder links you can safely ignore this warning.
+@echo You can disable this warning by setting the environment variable PM_DISABLE_VS_WARNING.
+@echo.
+
+:: Check for the directory that we need. Note that mkdir will create any directories
+:: that may be needed in the path
+:ENSURE_DIR
+@if not exist "%PM_PACKAGES_ROOT%" (
+ @echo Creating directory %PM_PACKAGES_ROOT%
+ @mkdir "%PM_PACKAGES_ROOT%"
+ @if errorlevel 1 goto ERROR_MKDIR_PACKAGES_ROOT
+)
+
+:: The Python interpreter may already be externally configured
+@if defined PM_PYTHON_EXT (
+ @set PM_PYTHON=%PM_PYTHON_EXT%
+ @goto PACKMAN
+)
+
+@set PM_PYTHON_DIR=%PM_PACKAGES_ROOT%\python\2.7.6-windows-x86
+@set PM_PYTHON=%PM_PYTHON_DIR%\python.exe
+
+@if exist "%PM_PYTHON%" goto PACKMAN
+
+@set [email protected]
+@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
+@set TARGET=%TEMP_FILE_NAME%.exe
+@call "%~dp0fetch_file_from_s3.cmd" %PM_PYTHON_PACKAGE% "%TARGET%"
+@if errorlevel 1 goto ERROR
+
+@echo Unpacking ...
+@"%TARGET%" -o"%PM_PYTHON_DIR%" -y 1> nul
+@if errorlevel 1 goto ERROR
+
+@del "%TARGET%"
+
+:PACKMAN
+:: The packman module may already be externally configured
+@if defined PM_MODULE_EXT (
+ @set PM_MODULE=%PM_MODULE_EXT%
+ @goto ENSURE_7za
+)
+
+@set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman-common\%PM_PACKMAN_VERSION%
+@set PM_MODULE=%PM_MODULE_DIR%\packman.py
+
+@if exist "%PM_MODULE%" goto ENSURE_7ZA
+
+@set PM_MODULE_PACKAGE=packman-common@%PM_PACKMAN_VERSION%.zip
+@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
+@set TARGET=%TEMP_FILE_NAME%
+@call "%~dp0fetch_file_from_s3.cmd" %PM_MODULE_PACKAGE% "%TARGET%"
+@if errorlevel 1 goto ERROR
+
+@echo Unpacking ...
+@"%PM_PYTHON%" "%~dp0\install_package.py" "%TARGET%" "%PM_MODULE_DIR%"
+@if errorlevel 1 goto ERROR
+
+@del "%TARGET%"
+
+:ENSURE_7ZA
+@set PM_7Za_VERSION=16.02.2
+@set PM_7Za_PATH=%PM_PACKAGES_ROOT%\chk\7za\%PM_7ZA_VERSION%
+@if exist "%PM_7Za_PATH%" goto END
+
+@"%PM_PYTHON%" "%PM_MODULE%" install 7za %PM_7za_VERSION% -r packman:cloudfront
+@if errorlevel 1 goto ERROR
+
+@goto END
+
+:ERROR_MKDIR_PACKAGES_ROOT
+@echo Failed to automatically create packman packages repo at %PM_PACKAGES_ROOT%.
+@echo Please set a location explicitly that packman has permission to write to, by issuing:
+@echo.
+@echo setx PM_PACKAGES_ROOT {path-you-choose-for-storing-packman-packages-locally}
+@echo.
+@echo Then launch a new command console for the changes to take effect and run packman command again.
+@exit /B 1
+
+:ERROR
+@echo !!! Failure while configuring local machine :( !!!
+@exit /B 1
+
+:END
diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd new file mode 100755 index 0000000..90f717a --- /dev/null +++ b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd @@ -0,0 +1,22 @@ +:: You need to specify <package-name> <target-path> as input to this command
+@setlocal
+@set PACKAGE_NAME=%1
+@set TARGET_PATH=%2
+
+@echo Fetching %PACKAGE_NAME% from S3 ...
+
+@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_s3.ps1" -sourceName %PACKAGE_NAME% ^
+ -output %TARGET_PATH%
+:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option
+:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes:
+@if not exist %TARGET_PATH% goto ERROR_DOWNLOAD_FAILED
+@if %~z2==0 goto ERROR_DOWNLOAD_FAILED
+
+@endlocal
+@exit /b 0
+
+:ERROR_DOWNLOAD_FAILED
+@echo Failed to download file from S3
+@echo Most likely because endpoint cannot be reached or file %PACKAGE_NAME% doesn't exist
+@endlocal
+@exit /b 1
\ No newline at end of file diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1 b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1 new file mode 100755 index 0000000..132fe0d --- /dev/null +++ b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1 @@ -0,0 +1,60 @@ +param(
+[Parameter(Mandatory=$true)][string]$sourceName=$null,
+[string]$output="out.exe"
+)
+$source = "http://packman.s3.amazonaws.com/" + $sourceName
+$filename = $output
+
+$triesLeft = 3
+
+do
+{
+ $triesLeft -= 1
+ $req = [System.Net.httpwebrequest]::Create($source)
+ $req.cookiecontainer = New-Object System.net.CookieContainer
+
+ try
+ {
+ Write-Host "Connecting to S3 ..."
+ $res = $req.GetResponse()
+ if($res.StatusCode -eq "OK") {
+ Write-Host "Downloading ..."
+ [int]$goal = $res.ContentLength
+ $reader = $res.GetResponseStream()
+ $writer = new-object System.IO.FileStream $fileName, "Create"
+ [byte[]]$buffer = new-object byte[] 4096
+ [int]$total = [int]$count = 0
+ do
+ {
+ $count = $reader.Read($buffer, 0, $buffer.Length);
+ $writer.Write($buffer, 0, $count);
+ $total += $count
+ if($goal -gt 0) {
+ Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
+ } else {
+ Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
+ }
+ } while ($count -gt 0)
+
+ $triesLeft = 0
+ }
+ }
+ catch
+ {
+ Write-Host "Error connecting to S3!"
+ Write-Host $_.Exception|format-list -force
+ }
+ finally
+ {
+ if ($reader)
+ {
+ $reader.Close()
+ }
+ if ($writer)
+ {
+ $writer.Flush()
+ $writer.Close()
+ }
+ }
+} while ($triesLeft -gt 0)
+
diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1 b/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1 new file mode 100755 index 0000000..b9cb23c --- /dev/null +++ b/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1 @@ -0,0 +1,37 @@ +param(
+[Parameter(Mandatory=$true)][string]$sourceUrl=$null,
+[Parameter(Mandatory=$true)][string]$output=$null
+)
+$source = $sourceUrl
+$filename = $output
+
+$req = [System.Net.httpwebrequest]::Create($source)
+$req.cookiecontainer = New-Object System.net.CookieContainer
+
+Write-Host "Connecting to $source ..."
+$res = $req.GetResponse()
+
+if($res.StatusCode -eq "OK") {
+ Write-Host "Downloading ..."
+ [int]$goal = $res.ContentLength
+ $reader = $res.GetResponseStream()
+ $writer = new-object System.IO.FileStream $fileName, "Create"
+ [byte[]]$buffer = new-object byte[] 4096
+ [int]$total = [int]$count = 0
+ do
+ {
+ $count = $reader.Read($buffer, 0, $buffer.Length);
+ $writer.Write($buffer, 0, $count);
+ $total += $count
+ if($goal -gt 0) {
+ Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
+ } else {
+ Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
+ }
+ } while ($count -gt 0)
+
+ $reader.Close()
+ $writer.Flush()
+ $writer.Close()
+}
+
diff --git a/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1 b/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1 new file mode 100755 index 0000000..a8c9c1b --- /dev/null +++ b/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1 @@ -0,0 +1,2 @@ +$out = [System.IO.Path]::GetTempFileName()
+Write-Host $out
\ No newline at end of file diff --git a/buildtools/packman5/win-bootstrap/install_package.py b/buildtools/packman5/win-bootstrap/install_package.py new file mode 100755 index 0000000..3aa294e --- /dev/null +++ b/buildtools/packman5/win-bootstrap/install_package.py @@ -0,0 +1,39 @@ +import logging
+import zipfile
+import tempfile
+import sys
+import shutil
+
+__author__ = 'hfannar'
+logging.basicConfig(level=logging.WARNING, format="%(message)s")
+logger = logging.getLogger('install_package')
+
+
+class TemporaryDirectory:
+ def __init__(self):
+ self.path = None
+
+ def __enter__(self):
+ self.path = tempfile.mkdtemp()
+ return self.path
+
+ def __exit__(self, type, value, traceback ):
+ # Remove temporary data created
+ shutil.rmtree(self.path)
+
+
+def install_package(package_src_path, package_dst_path):
+ with zipfile.ZipFile(package_src_path, allowZip64=True) as zip_file, TemporaryDirectory() as temp_dir:
+ zip_file.extractall(temp_dir)
+ # Recursively copy (temp_dir will be automatically cleaned up on exit)
+ try:
+ # Recursive copy is needed because both package name and version folder could be missing in
+ # target directory:
+ shutil.copytree(temp_dir, package_dst_path)
+ except OSError, exc:
+ logger.warning("Directory %s already present, packaged installation aborted" % package_dst_path)
+ else:
+ logger.info("Package successfully installed to %s" % package_dst_path)
+
+
+install_package(sys.argv[1], sys.argv[2])
\ No newline at end of file diff --git a/buildtools/steps/build_all_linux_ue4_crosscompile.bat b/buildtools/steps/build_all_linux_ue4_crosscompile.bat index 5d56024..1799870 100644..100755 --- a/buildtools/steps/build_all_linux_ue4_crosscompile.bat +++ b/buildtools/steps/build_all_linux_ue4_crosscompile.bat @@ -32,20 +32,4 @@ @echo. @if %ERRORLEVEL% neq 0 exit /B -@echo | set /p dummyName=** Building profile ... ** -@pushd -@cd "%ROOT_PATH%\linux64-profile-UE4" -@nmake -@popd -@echo ** End of profile ** -@echo. -@if %ERRORLEVEL% neq 0 exit /B - -@echo | set /p dummyName=** Building checked ... ** -@pushd -@cd "%ROOT_PATH%\linux64-checked-UE4" -@nmake -@popd -@echo ** End of checked ** -@echo. @exit /B
\ No newline at end of file |