Skip to content

Instantly share code, notes, and snippets.

@Juppit
Created January 17, 2016 22:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Juppit/39a41f00ede127013cc1 to your computer and use it in GitHub Desktop.
Save Juppit/39a41f00ede127013cc1 to your computer and use it in GitHub Desktop.
Build Cygwin Environment
:: Author: Peter Dobler (@Juppit)
:: e-Mail: esp8266-mail@t-online.de
::
:: Last edit: 15/01/2016
@ECHO off
setlocal
CALL :CHECK_ARCH
:: edit this part if needed
SET CYGWIN_DRIVE=C
SET CYGWIN_DIR=Cygwin%PROZ_ARCH%
SET CYGWIN_LPD=Cygwin%PROZ_ARCH%.LPD
SET MIRROR=ftp://linux.rz.ruhr-uni-bochum.de/cygwin/
IF NOT [%1]==[] set MIRROR=%1
IF NOT [%2]==[] set CYGWIN_DIR=%2
IF NOT [%3]==[] set CYGWIN_LPD=%3
SET CYGWIN_PATH_CYG=%CYGWIN_DRIVE%:/%CYGWIN_DIR%/
SET CYGWIN_PATH_WIN=%CYGWIN_DRIVE%:\%CYGWIN_DIR%\
SET APT_CYG=apt-cyg
SET CYGWIN_APT_CYG=%CYGWIN_PATH_CYG%bin/%APT_CYG%
SET CYGWIN_BASH_WIN=%CYGWIN_DRIVE%:\%CYGWIN_DIR%\bin\bash.exe
GOTO START
:: Todo %2 --> Drive:\Path\Dir
REM modify / delete substring
SET modifiedstring=%oldstring:substring=replacestring%
SET %oldstring:substring=%
:: Some subroutines
:PRINT_HEAD
cls
ECHO ----------------------------------
ECHO %~n0 %*
ECHO ----------------------------------
GOTO :EOF
:CHECK_ARCH
SET PROZ_ARCH=0
IF "%PROCESSOR_ARCHITECTURE%" == "AMD64" (SET PROZ_ARCH=64) ELSE (
IF "%PROCESSOR_ARCHITECTURE%" == "IA64" (SET PROZ_ARCH=64) ELSE (
IF "%PROCESSOR_ARCHITECTURE%" == "x86" (SET PROZ_ARCH=32) ))
IF "%PROCESSOR_ARCHITEW6432%" == "x86" (SET PROZ_ARCH=32)
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "64" > nul
IF %errorlevel%==0 SET PROZ_ARCH=64
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "86" > nul
IF %errorlevel%==0 SET PROZ_ARCH=32
GOTO :EOF
:CHECK_ADMIN
ECHO Check admin rights
OPENFILES > nul
IF ERRORLEVEL 1 (
ECHO. You must be logged on as Administrator.
REM EXIT /B 1
)
VER | FIND "Version 6." > nul
IF %ERRORLEVEL% == 0 (
REM Newer than Vista
)
GOTO :EOF
:: Here we start
:START
CALL :PRINT_HEAD
SET M=0
:M_ARCH
ECHO.
ECHO ......................
ECHO Prozessor architecture
ECHO ......................
ECHO 0 - %PROZ_ARCH% bit
ECHO.
ECHO 1 - 32 bit
ECHO 2 - 64 bit
ECHO.
SET /P M=select and/or press ENTER:
IF %M%==1 (SET PROZ_ARCH=32) ELSE (
IF %M%==2 (SET PROZ_ARCH=64) ELSE (
IF NOT %M%==0 (GOTO M_ARCH) ))
SET SETUP=setup-x86.exe
IF %PROZ_ARCH% == 64 SET SETUP=setup-x86_64.exe
SET SETUP_URL=https://cygwin.com/%SETUP%
SET M=0
IF %CYGWIN_DRIVE%==C (SET M=1) ELSE (
IF %CYGWIN_DRIVE%==D (SET M=2) ELSE (
IF %CYGWIN_DRIVE%==E (SET M=3) ELSE (
IF %CYGWIN_DRIVE%==F (SET M=4) ELSE (
IF %CYGWIN_DRIVE%==G (SET M=5) ))))
CALL :PRINT_HEAD
:M_DRIVE
ECHO.
ECHO ..................
ECHO Installation drive
ECHO ..................
ECHO 0 - %CYGWIN_DRIVE%:
ECHO.
IF EXIST C:\\nul ECHO 1 - C:
IF EXIST D:\\nul ECHO 2 - D:
IF EXIST E:\\nul ECHO 3 - E:
IF EXIST F:\\nul ECHO 4 - F:
IF EXIST G:\\nul ECHO 5 - G:
:: continue if you like
ECHO.
SET /P M=select and/or press ENTER:
IF %M%==1 (IF EXIST C:\\nul SET CYGWIN_DRIVE=C) ELSE (
IF %M%==2 (IF EXIST D:\\nul SET CYGWIN_DRIVE=D) ELSE (
IF %M%==3 (IF EXIST E:\\nul SET CYGWIN_DRIVE=E) ELSE (
IF %M%==4 (IF EXIST F:\\nul SET CYGWIN_DRIVE=F) ELSE (
IF %M%==5 (IF EXIST G:\\nul SET CYGWIN_DRIVE=G) ELSE (
IF NOT %M%==0 (GOTO M_DRIVE) )))))
CALL :PRINT_HEAD
ECHO (find mirrors at https://cygwin.com/mirrors.html)
SET M=0
:M_MIRROR
ECHO ............................
ECHO Select closest Cygwin mirror
ECHO ............................
ECHO 0 - %MIRROR%
ECHO.
ECHO 1 - input URL
ECHO.
SET /P M=select and/or press ENTER:
IF NOT %M%==1 GOTO CHECK_MIRROR
SET /P MIRROR=inputURL and press ENTER:
GOTO MIRROR_OK
:CHECK_MIRROR
GOTO MIRROR_OK
REM most server don't answer ping
FOR /F "tokens=1,2,3 delims=/" %%i IN ("%MIRROR%") DO (
set PROTOKOLL=%%i
set DOMAIN=%%j
)
ping %PROTOKOLL%//%DOMAIN% -n 1 >nul
IF %errorlevel%==0 GOTO MIRROR_OK
ECHO Sorry, host %PROTOKOLL%//%DOMAIN% is not reachable
GOTO M_MIRROR
REM
:MIRROR_OK
CALL :PRINT_HEAD
ECHO.
ECHO .......................
ECHO Select Cygwin directory
ECHO .......................
ECHO 0 - %CYGWIN_DRIVE%:\%CYGWIN_DIR%
ECHO.
ECHO 1 - input directory name
ECHO.
SET /P M=select and/or press ENTER:
IF NOT %M%==1 GOTO CYGWIN_DIR_OK
SET /P CYGWIN_DIR=input name and press ENTER:
:CYGWIN_DIR_OK
CALL :PRINT_HEAD
ECHO.
ECHO .........................
ECHO Select database directory
ECHO .........................
ECHO 0 - %CYGWIN_DRIVE%:\%CYGWIN_LPD%
ECHO.
ECHO 1 - input directory name
ECHO.
SET /P M=select and/or press ENTER:
IF NOT %M%==1 GOTO CYGWIN_LPD_OK
SET /P CYGWIN_LPD=input name and press ENTER:
:CYGWIN_LPD_OK
CALL :PRINT_HEAD
ECHO.
ECHO Setup Cygwin %PROZ_ARCH%-bit on %CYGWIN_PATH_WIN%
ECHO with cache on %CYGWIN_LPD% from %MIRROR%
pause
%CYGWIN_DRIVE%:
IF NOT EXIST %CYGWIN_PATH_WIN% mkdir %CYGWIN_PATH_WIN%
cd %CYGWIN_PATH_WIN%
SET POWER_SHELL=PowerShell.exe
where /Q %POWER_SHELL%
IF %errorlevel%==0 GOTO POWER_SHELL_START
ECHO.
ECHO To retrieve %SETUP% for you Windows %POWER_SHELL% is needed.
ECHO Download %SETUP% from %SETUP_URL%
ECHO Save it to %CYGWIN_PATH_WIN%
ECHO Then try %~n0 again...
pause
GOTO EOF
:POWER_SHELL_START
ECHO.
ECHO please wait for download %SETUP%...
powershell -Command (New-Object System.Net.WebClient).DownloadFile(\"%SETUP_URL%\", \"%SETUP%\")
:GET_SETUP_FILE_END
REM for testing only
goto GET_APT_CYG
::IF EXIST %CYGWIN_PATH_WIN%bin% goto GET_APT_CYG
ECHO.
ECHO Install cygwin on %CYGWIN_PATH_WIN% by %SETUP%
CALL %CYGWIN_PATH_WIN%%SETUP% -D -R %CYGWIN_PATH_WIN% -s %MIRROR1% -l %CYGWIN_PATH_WIN%%CYGWIN_LPD% -a %PROZ_ARCH% -q -n -B -C base
CALL %CYGWIN_PATH_WIN%%SETUP% -L -R %CYGWIN_PATH_WIN% -l %CYGWIN_PATH_WIN%%CYGWIN_LPD% -q -n -C base
IF %errorlevel%==0 (ECHO "Cygwin is now installed on %CYGWIN_PATH_WIN%") else (echo opps!) && pause
:GET_APT_CYG
::IF EXIST %CYGWIN_PATH_WIN%bin\%APT_CYG% goto GET_PACKAGES
ECHO Install %APT_CYG%
%CYGWIN_BASH_WIN% -l -c "lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > %CYGWIN_PATH_WIN%apt-cyg"
%CYGWIN_BASH_WIN% -l -c "install %CYGWIN_PATH_CYG%apt-cyg %CYGWIN_PATH_CYG%bin"
MOVE %CYGWIN_PATH_WIN%%APT_CYG% %CYGWIN_PATH_WIN%bin\
%CYGWIN_BASH_WIN% -l -c chmod +x %CYGWIN_PATH_CYG%bin/apt-cyg
:GET_PACKAGES
ECHO Now get needed packages
:: install nano just to have it
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install nano
goto SET_REG
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install wget zip unzip rsync git > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install autoconf gperf bison flex patch make automake > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install texinfo libtool wget gawk > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install cygwin32-ncurses ncurses gcc-g++ > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install expat libexpat-devel > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install libncurses-devel libintl-devel libintl8 > /dev/null
:: next installs are needed by gcc-xtensa
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install zlib-devel libiconv-devel > /dev/null
%CYGWIN_BASH_WIN% -l %CYGWIN_APT_CYG% install bsdtar > /dev/null
:SET_REG
ECHO.
ECHO Set DriveCaseInsensitive
SET ScriptDirectory=%~dp0
SET SCRIPT=SetCaseinsensitive.ps1
SET ScriptPath=%ScriptDirectory%%SCRIPT%
ECHO New-ItemProperty -Path "hklm:\SYSTEM\CurrentControlSet\Control\Session Manager\kernel" -Name "obcaseinsensitive" -Value 0 -PropertyType DWORD -Force > SetCaseinsensitive.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%ScriptPath%""' -Verb RunAs}";
DEL %ScriptDirectory%%SCRIPT%
ECHO.
ECHO %~0 run successfull.
pause
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment