diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d4f7c40..15e5716 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,17 +1,23 @@ -name: test +name: Test packages on: push: branches: [ "main" ] + paths-ignore: + - '.vscode/**' + - '.devcontainer/**' + - '.gitignore' + - 'CONTRIBUTING.md' pull_request: branches: [ "main" ] workflow_dispatch: jobs: + #Test linux install script linux-install: + name: linux(sh) script install test runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 @@ -26,8 +32,9 @@ jobs: kos32-gcc -v kos32-g++ -v - #Test windows install script - windows-install: + #Test Batch install script + batch-install: + name: Batch script install test runs-on: windows-latest steps: - uses: actions/checkout@v4 @@ -38,11 +45,33 @@ jobs: choco install 7zip - name: Run script - run: ${{ github.workspace }}/install.bat + run: ${{ github.workspace }}\install.bat + + #Test PowerShell install script + PowerShell-install: + name: PowerShell install script test + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Install modules + run: | + Set-PSRepository PSGallery -InstallationPolicy Trusted + Install-Module -Name 7Zip4PowerShell + + - name: Run script + run: ${{ github.workspace }}\install.ps1 + + - name: Test + run: | + kos32-gcc -v + kos32-g++ -v #Test Windows Installer build-Installer: + name: Build windows installer test runs-on: windows-latest + needs: PowerShell-install steps: - uses: actions/checkout@v4 @@ -58,8 +87,9 @@ jobs: # Upload entire repository path: './build/installer.exe' - # Test Package - package: + # Test deb package build + deb-package-build: + name: Debian package build test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -67,15 +97,28 @@ jobs: - name: Build run: | cmake -B ${{ github.workspace }}/build - cmake --build ${{ github.workspace }}/build --target Package + cmake --build ${{ github.workspace }}/build --target deb - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: package + name: deb-package # Upload entire repository path: './build/package.deb' - + + # Test deb package install/remove + deb-package-test: + name: Debian package install/remove test + runs-on: ubuntu-latest + needs: deb-package-build + steps: + - uses: actions/checkout@v4 + + - name: Build + run: | + cmake -B ${{ github.workspace }}/build + cmake --build ${{ github.workspace }}/build --target deb + - name: Install package run: echo '/kolibrios-toolchain' | sudo apt install ${{ github.workspace }}/build/package.deb -y @@ -94,3 +137,52 @@ jobs: - name: Remove package run: sudo apt remove kos32-gcc + #Test chocolatey package build + chocolatey-package-build: + name: Chocolatey build package test + runs-on: windows-latest + needs: PowerShell-install + steps: + - uses: actions/checkout@v4 + + - name: Build + run: | + cmake -B ${{ github.workspace }}/build + cmake --build ${{ github.workspace }}/build --target choco + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: choco-package + # Upload entire repository + path: './build/choco-package.nupkg' + + # Test chocolatey package install/remove + chocolatey-package-test: + name: chocolatey install test + runs-on: windows-latest + needs: chocolatey-package-build + steps: + - uses: actions/checkout@v4 + + - name: Install modules + run: | + Set-PSRepository PSGallery -InstallationPolicy Trusted + Install-Module -Name 7Zip4PowerShell + + - name: Build + run: | + cmake -B ${{ github.workspace }}/build + cmake --build ${{ github.workspace }}/build --target choco + + - name: Install package + run: choco install ${{ github.workspace }}\build\choco-package.nupkg + + - name: Test + run: | + kos32-gcc -v + kos32-g++ -v + + - name: Remove package + run: choco uninstall kos32-gcc + diff --git a/.gitignore b/.gitignore index 8ff6a58..bc41e5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ Output/ -package/DEBIAN/postinst -package/DEBIAN/copyright -package.deb build/ +chocolatey/kos32-gcc*.nupkg +chocolatey/install.ps1 +chocolatey/tools/install.ps1 +bat/builds.kolibrios.org +*.7z diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d801e45..05773af 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,9 +1,6 @@ { "recommendations": [ "chouzz.vscode-innosetup", - "streetsidesoftware.code-spell-checker", - "streetsidesoftware.code-spell-checker-russian", "ms-vscode.cmake-tools", - "github.vscode-github-actions" ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 6418f2d..b5ed4a7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,5 +6,13 @@ "msys", "kolibrios", "Egor" - ] + ], + "cSpell.ignorePaths": [ + "vscode-extension", + ".git/objects", + ".vscode", + ".vscode-insiders", + "package/DEBIAN" + ], + "cmake.parallelJobs": 1 } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 1277121..df7b218 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,26 +1,130 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.10) +CMAKE_MINIMUM_REQUIRED(VERSION 3.2) project( KolibriOS-gcc-Toolchain-installer DESCRIPTION "Installer of gcc toolchain for KolibriOS" ) - add_custom_target( - Package - COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/install.sh ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/postinst - COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/copyright - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/control - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/prerm - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/postinst - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/postrm - COMMAND chmod 775 ${CMAKE_CURRENT_SOURCE_DIR}/package/DEBIAN/copyright - COMMAND dpkg-deb --build ${CMAKE_CURRENT_SOURCE_DIR}/package ${CMAKE_CURRENT_BINARY_DIR}/package.deb + download_libraries + COMMAND wget -q -N http://ftp.kolibrios.org/users/Serge/new/Toolchain/sdk-28-10-16.7z -O ${CMAKE_CURRENT_BINARY_DIR}/sdk-28-10-16.7z + COMMAND wget -r --no-parent -q http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/lib + COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/builds.kolibrios.org/en_US/data/contrib/sdk/lib/* ${CMAKE_CURRENT_BINARY_DIR}/lib + COMMAND rm -R ${CMAKE_CURRENT_BINARY_DIR}/builds.kolibrios.org + COMMENT "Download libraries" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/sdk-28-10-16.7z + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/sdk-28-10-16.7z WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) add_custom_target( - Installer - COMMAND iscc /O"${CMAKE_CURRENT_BINARY_DIR}" ${CMAKE_CURRENT_SOURCE_DIR}/installator.iss + archive_libraries + COMMAND 7z x -y -bso0 -bsp0 ${CMAKE_CURRENT_BINARY_DIR}/sdk-28-10-16.7z -o${CMAKE_CURRENT_BINARY_DIR} + COMMAND 7z a -bso0 -bsp0 ${CMAKE_CURRENT_BINARY_DIR}/lib.7z ${CMAKE_CURRENT_BINARY_DIR}/lib + COMMENT "Add libraries to archive" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/lib.7z + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/lib.7z + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/sdk-28-10-16.7z + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +add_custom_target( + download_linux + COMMAND wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/x86_64-linux-kos32-5.4.0.7z -q -O ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-linux.7z + COMMAND wget http://board.kolibrios.org/download/file.php?id=8301libisl.so.10.2.2.7z -q -O ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2.7z + COMMENT "Download linux toolchain" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-linux.7z + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2.7z + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-linux.7z + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2.7z + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +add_custom_target( + download_windows + COMMAND wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/msys-kos32-5.4.0.7z -q -O ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-win.7z + COMMENT "Download windows toolchain" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-win.7z + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-win.7z + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +add_custom_target( + extract_linux + COMMAND 7z x -y -bso0 -bsp0 ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2.7z + COMMENT "Extract linux archives" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2 + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2 + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2.7z + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +add_custom_target( + configureDebPackage + COMMENT "Setup debian package" + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/package + COMMAND cp -rf ${CMAKE_CURRENT_SOURCE_DIR}/package/ ${CMAKE_CURRENT_BINARY_DIR}/package + COMMAND chmod -R 775 ${CMAKE_CURRENT_BINARY_DIR}/package + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/package/usr/lib/x86_64-linux-gnu + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/package/home/autobuild/tools + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + OUTPUT + ${CMAKE_CURRENT_SOURCE_DIR}/package/ + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/package/ +) + + +add_custom_target( + deb + COMMAND cp -f ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2 ${CMAKE_CURRENT_BINARY_DIR}/package/usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 + COMMAND cp -f ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-linux.7z ${CMAKE_CURRENT_BINARY_DIR}/package/home/autobuild/tools + COMMAND cp -f ${CMAKE_CURRENT_BINARY_DIR}/lib.7z ${CMAKE_CURRENT_BINARY_DIR}/package/home/autobuild/tools + COMMAND dpkg-deb --build ${CMAKE_CURRENT_BINARY_DIR}/package ${CMAKE_CURRENT_BINARY_DIR}/package.deb + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Build deb package" + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/package.deb + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/libisl.so.10.2.2 + ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-linux.7z + ${CMAKE_CURRENT_BINARY_DIR}/lib.7z + configureDebPackage +) + +add_custom_target( + Installer + COMMAND 7z x ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-win.7z -o ${CMAKE_CURRENT_BINARY_DIR} + COMMAND iscc /O"${CMAKE_CURRENT_BINARY_DIR}" ${CMAKE_CURRENT_SOURCE_DIR}/installator.iss + COMMENT "Build windows installer" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/installator.iss + ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE + ${CMAKE_CURRENT_SOURCE_DIR}/README.md +) + +add_custom_target( + choco + COMMAND cp -f ${CMAKE_CURRENT_BINARY_DIR}/kos32-toolchain-win.7z ${CMAKE_CURRENT_SOURCE_DIR}/chocolatey/tools + COMMAND choco pack + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/chocolatey + COMMENT "Build chocolatey package" + SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/chocolatey/kos32-gcc.nuspec + ${CMAKE_CURRENT_SOURCE_DIR}/chocolatey/tools/chocolateyInstall.ps1 + ${CMAKE_CURRENT_SOURCE_DIR}/chocolatey/tools/chocolateyUninstall.ps1 ) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..92c83c0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Как законтрибьютить? + +просто форкаешь репозиторий, делаешь нужные изменения, делаешь запрос на слияние, ждёшь принятия запроса diff --git a/README.md b/README.md index 614b6d0..d3c2ba3 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,25 @@ +[![Test packages](https://github.com/Egor00f/kolibrios-gcc-toolchain/actions/workflows/test.yml/badge.svg)](https://github.com/Egor00f/kolibrios-gcc-toolchain/actions/workflows/test.yml) + # Установщик gcc тулчейна для KolibriOS -Просто устанавливает тулчейн. +Просто устанавливает тулчейн C/C++ компилятора для KolinriOS от Serge. -оригинальный скрипт для linux взят из http://board.kolibrios.org/viewtopic.php?p=76227&hilit=%D1%82%D1%83%D0%BB%D1%87%D0%B5%D0%B9%D0%BD#p76227 -(скрипт подправлен) +Оригинальный скрипт для linux взят [по ссылке](http://board.kolibrios.org/viewtopic.php?p=76227&hilit=%D1%82%D1%83%D0%BB%D1%87%D0%B5%D0%B9%D0%BD#p76227) (скрипт был значительно изменён). ## Установка -Для установки требуются `7z` и `wget`. При выборе своего пути в любом случае будет создана папка win32 в выбранной папке. +Для установки требуются `7z` и `wget`. При выборе своего пути в любом случае будет создана папка win32 в выбранной папке. ### Linux -Просто запустите `install.sh`. +Просто запустите `install.sh`: +``` +./install.sh +``` -Некоторые команды требуют sudo +Некоторые команды требуют sudo. + +Или установите пакет. [Ссылка на пакет](https://git.kolibrios.org/Egor00f/-/packages/debian/kos32-gcc/) или в релизах. Тулчейн по умолчанию устанавливается в папку `/home/autobuild/tools/win32`, но скрипт вас спросит перед установкой. @@ -21,24 +27,41 @@ Желательно чтобы вы перед установкой тулчейна установите msys из установщика MinGW. -Для windows есть установщик(посмотрите в релизах) или просто запустите `install.bat`. Рекомендуется запускать с повышенными правами +Для windows есть установщик(посмотрите в релизах) или просто запустите `install.bat`. Нужно запускать с повышенными правами. wget для windows можно поискать в GnuWin32 например, 7z Нужно добавить в PATH. -Тулчейн по умолчанию устанавливается в папку `C:/MinGW/msys/1.0/home/autobuild/tools/win32`, но вы можете изменить путь добавив аргумент - путь установки(пустой - путь по умолчанию) +Тулчейн по умолчанию устанавливается в папку `C:/MinGW/msys/1.0/home/autobuild/tools/win32`, но вы можете изменить путь добавив аргумент - путь установки(пустой - путь по умолчанию). Например: + +``` +install.bat Path +``` + +Так же вы можете установить тулчейн с помощью установщика(можете найти его в [релизах](https://git.kolibrios.org/Egor00f/-/packages/debian/kos32-gcc/)) ## Сборка установщиков -Установщики полностью базируются на скриптах установки, так что без разницы что вы будете использовать скрипт или установщик, но установщики могут и удалить тулчейн. +Установщики базируются на скриптах установки, так что без разницы что вы будете использовать скрипт или установщик, но установщики могут и удалить тулчейн. -Установщики собираются с помощью cmake (cmake просто потому что могу) +Установщики собираются с помощью cmake. + +Просто запустите: + +``` +mkdir build +cd build +cmake .. +make <установщик> +``` ### Linux -Можно собрать deb пакет. Цель для сборки Package. Для сборки требуется `dpkg-deb` +Можно собрать deb пакет. Цель для сборки Package. Для сборки требуется `dpkg-deb`. ### Windows +Для сборки установщиков необходимы `CoreUtils` и `wget` из `GnuWin32` или ещё откуда то. + Установщик собирается с помощью Inno Setup. Цель для сборки Installer. Для сборки требуется компилятор Inno Setup. -Если сборка не работает, добавьте папку Inno Setup(например: `C:\Programs Files\Inno Setup 6`) в PATH +Если сборка не работает, добавьте папку Inno Setup (например: `C:\Programs Files\Inno Setup 6`) в PATH. diff --git a/bat/cleanArchives.bat b/bat/cleanArchives.bat new file mode 100644 index 0000000..e10ab8a --- /dev/null +++ b/bat/cleanArchives.bat @@ -0,0 +1,4 @@ +set TOOLCHAIN_DIR=%1 + +del /Q %TOOLCHAIN_DIR%\kos32-toolchain.7z +del /Q %TOOLCHAIN_DIR%\win32\mingw32\sdk-28-10-16.7z diff --git a/bat/downloadLibraries.bat b/bat/downloadLibraries.bat new file mode 100644 index 0000000..bf3f12b --- /dev/null +++ b/bat/downloadLibraries.bat @@ -0,0 +1,6 @@ +set TOOLCHAIN_DIR=%1 + + +wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/sdk-28-10-16.7z -O %TOOLCHAIN_DIR%\win32\mingw32\sdk-28-10-16.7z + +7z x -y %TOOLCHAIN_DIR%\win32\mingw32\sdk-28-10-16.7z -o%TOOLCHAIN_DIR%\win32\mingw32 diff --git a/bat/downloadToolchain.bat b/bat/downloadToolchain.bat new file mode 100644 index 0000000..07b02eb --- /dev/null +++ b/bat/downloadToolchain.bat @@ -0,0 +1,5 @@ +set TOOLCHAIN_DIR=%1 + +wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/msys-kos32-5.4.0.7z -O %TOOLCHAIN_DIR%\kos32-toolchain.7z + +7z x -y %TOOLCHAIN_DIR%\kos32-toolchain.7z -o%TOOLCHAIN_DIR% diff --git a/bat/updateLibraries.bat b/bat/updateLibraries.bat new file mode 100644 index 0000000..6de8aba --- /dev/null +++ b/bat/updateLibraries.bat @@ -0,0 +1,5 @@ +set TOOLCHAIN_DIR=%1 + +wget -r --no-parent http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/ +move /y builds.kolibrios.org\en_US\data\contrib\sdk\lib\* %TOOLCHAIN_DIR%\win32\mingw32\lib +rd /s /q builds.kolibrios.org diff --git a/chocolatey/kos32-gcc.nuspec b/chocolatey/kos32-gcc.nuspec new file mode 100644 index 0000000..5f0398b --- /dev/null +++ b/chocolatey/kos32-gcc.nuspec @@ -0,0 +1,22 @@ + + + + kos32-gcc + KolibriOS gcc toolchain installer + 0.1.6 + Egor00f + Egor00f + idk + _KolibriOS gcc toolchain installer. This package installing KolibriOS gcc toolchain by Serge. + https://github.com/Egor00f/kolibrios-gcc-toolchain/ + kolibrios toolchain compiler C/C++ + + https://github.com/Egor00f/kolibrios-gcc-toolchain/blob/main/LICENSE + false + + + + + + + \ No newline at end of file diff --git a/chocolatey/tools/chocolateyInstall.ps1 b/chocolatey/tools/chocolateyInstall.ps1 new file mode 100644 index 0000000..ccde14b --- /dev/null +++ b/chocolatey/tools/chocolateyInstall.ps1 @@ -0,0 +1,15 @@ +#NOTE: Please remove any commented lines to tidy up prior to releasing the package, including this one + +$packageName = 'kos32-gcc' # arbitrary name for the package, used in messages + +# main helpers - these have error handling tucked into them already +# installer, will assert administrative rights + + +$INSTALL_PATH = Read-Host 'Path to install toolchain(Enter - default)' + +Expand-7Zip -ArchiveFileName C:\ProgramData\Chocolatey\lib\kos32-gcc\tools\kos32-toolchain-win.7z -TargetPath $INSTALL_PATH + + +Out-File -FilePath C:\ProgramData\Chocolatey\lib\kos32-gcc\install-path -InputObject $INSTALL_PATH + diff --git a/chocolatey/tools/chocolateyUninstall.ps1 b/chocolatey/tools/chocolateyUninstall.ps1 new file mode 100644 index 0000000..33802c6 --- /dev/null +++ b/chocolatey/tools/chocolateyUninstall.ps1 @@ -0,0 +1,4 @@ + +$installPath = Get-Content C:\ProgramData\Chocolatey\lib\kos32-gcc\install-path | Out-String | ConvertFrom-StringData + +Remove-Item -LiteralPath $installPath -Force -Recurse diff --git a/install.bat b/install.bat index c5568e9..1cfbe58 100644 --- a/install.bat +++ b/install.bat @@ -1,4 +1,4 @@ -@echo off +rem@echo off for /f %%a in ('echo prompt $E^| cmd') do set "ESC=%%a" @@ -12,6 +12,7 @@ else ( set TOOLCHAIN_DIR=%1 ) +echo %TOOLCHAIN_DIR% Call :print_msg Create the %TOOLCHAIN_DIR% folder... @@ -20,14 +21,11 @@ mkdir %TOOLCHAIN_DIR% Call :print_ok Successfully! +cd bat call :print_msg Download the kos32-gcc toolchain... -cd %TOOLCHAIN_DIR% - -wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/msys-kos32-5.4.0.7z -O %TOOLCHAIN_DIR%\kos32-toolchain.7z - -7z x -y %TOOLCHAIN_DIR%\kos32-toolchain.7z -o%TOOLCHAIN_DIR% +downloadToolchain %TOOLCHAIN_DIR% Call :print_ok Successfully! @@ -35,11 +33,7 @@ Call :print_ok Successfully! Call :print_msg Downloading libraries... -cd %TOOLCHAIN_DIR%\win32\mingw32 - -wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/sdk-28-10-16.7z -O %TOOLCHAIN_DIR%\win32\mingw32\sdk-28-10-16.7z - -7z x -y %TOOLCHAIN_DIR%\win32\mingw32\sdk-28-10-16.7z +downloadLibraries.bat %TOOLCHAIN_DIR% Call :print_ok Successfully! @@ -47,17 +41,7 @@ Call :print_ok Successfully! Call :print_msg Updating libraries -cd %TOOLCHAIN_DIR%\win32\mingw32\lib - -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libdll.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libdll.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libfreetype.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libfreetype.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libc.dll.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libc.dll.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libSDLn.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libSDLn.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libcurses.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libcurses.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libz.dll.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libz.dll.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libogg.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libogg.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libvorbis.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libvorbis.a -wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libopenjpeg.a -O %TOOLCHAIN_DIR%\win32\mingw32\lib\libopenjpeg.a +updateLibraries %TOOLCHAIN_DIR% Call :print_ok Successfully! diff --git a/install.ps1 b/install.ps1 new file mode 100644 index 0000000..6cc03de --- /dev/null +++ b/install.ps1 @@ -0,0 +1,57 @@ +#Requires -RunAsAdministrator + +param( + [string]$InstallPath='C:\MinGW\msys\1.0\home\autobuild\tools' +) + +if (Get-Module -ListAvailable -Name 7Zip4PowerShell) +{} +else +{ + Install-Module -Name 7Zip4PowerShell +} + +$LIBS_PATH = '$InstallPath\win32\mingw32\lib\' +$LIBS_URL = 'http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/' + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing toolchain' -PercentComplete 0 -CurrentOperation 'Create the $InstallPath folder' + +mkdir $InstallPath -Force + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing toolchain' -PercentComplete 1 -CurrentOperation 'Download the kos32-gcc toolchain' + +Invoke-WebRequest http://ftp.kolibrios.org/users/Serge/new/Toolchain/msys-kos32-5.4.0.7z -OutFile $InstallPath\kos32-toolchain.7z + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing toolchain' -PercentComplete 20 -CurrentOperation 'Unpacking kos32-gcc toolchain' + +Expand-7Zip -ArchiveFileName $InstallPath\kos32-toolchain.7z -TargetPath $InstallPath + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing libraries' -PercentComplete 40 -CurrentOperation 'Downloading libraries' + +Invoke-WebRequest http://ftp.kolibrios.org/users/Serge/new/Toolchain/sdk-28-10-16.7z -OutFile $InstallPath\win32\mingw32\sdk-28-10-16.7z + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing libraries' -PercentComplete 50 -CurrentOperation 'Unpacking libraries' + +Expand-7Zip -ArchiveFileName $InstallPath\win32\mingw32\sdk-28-10-16.7z -TargetPath $InstallPath\win32\mingw32\ + + + +Write-Progress -Activity 'Installing toolchain' -Status 'Installing libraries' -PercentComplete 60 -CurrentOperation "Download libraries" + + +$response = Invoke-WebRequest -Uri $LIBS_URL -Method GET + +$files = @( $response.Content -split [environment]::NewLine | ? { $_ -like '*tageswerte*.zip*' } | % { $_ -replace '^(.*>)(tages.*\.zip)<.*', '$2' } ) + +foreach( $file in $files ) { + + Invoke-WebRequest -Uri ($LIBS_URL + $file) -Method GET -OutFile ($LIBS_PATH + $file) +} + +Write-Progress -Activity 'Installing toolchain' -Status 'Done!' -PercentComplete 99 -CurrentOperation "end" + diff --git a/install.sh b/install.sh index 7a0fc8e..243ff8a 100755 --- a/install.sh +++ b/install.sh @@ -2,49 +2,52 @@ # Written by turbocat2001 (Maxim Logaev) # Installation steps described by maxcodehack (Maxim Kuzmitsky) +# modified by Egor00f (Egor) set -e +pwd + +CONFIG_FOLDER="/etc/kos32-gcc" +INSTALL_PATH_FILE="$CONFIG_FOLDER/install-path" +DEFAULT_TOOLCHAIN_DIR="/home/autobuild/tools" + print_msg(){ - echo -e "\e[34m$1\e[0m" + echo -e "\e[34m$1\e[0m" } print_ok(){ - echo -e "\e[32m$1\e[0m" + echo -e "\e[32m$1\e[0m" } print_err(){ - echo -e "\e[31m$1\e[0m" - exit + echo -e "\e[31m$1\e[0m" + exit } check_utils(){ - printf "%s: " $1 - if command -v $1 &> /dev/null - then - print_ok "ok\r" - else - print_err "no\r" - fi + printf "%s: " $1 + if command -v $1 &> /dev/null + then + print_ok "ok\r" + else + print_err "no\r" + fi } -pwd - -DEFAULT_TOOLCHAIN_DIR="/home/autobuild/tools" - -TOOLCHAIN_DIR=$DEFAULT_TOOLCHAIN_DIR - -MESSAGE="Toolchain install path(default is $TOOLCHAIN_DIR): " - -echo -n $MESSAGE -read INPUT - -if [[ ! -z "$INPUT" ]]; then - TOOLCHAIN_DIR=$INPUT +if [ -f $INSTALL_PATH_FILE ]; then + TOOLCHAIN_DIR=$(head -n 1 $INSTALL_PATH_FILE) +else + echo -n -e "\e[0mToolchain install path \e[90m(default is $DEFAULT_TOOLCHAIN_DIR)\e[97m: " + read INPUT + if [[ ! -z "$INPUT" ]]; then + TOOLCHAIN_DIR=$INPUT + else + TOOLCHAIN_DIR=$DEFAULT_TOOLCHAIN_DIR + fi fi -echo "Installing toolchain to $TOOLCHAIN_DIR" - +echo -e "\e[0mInstalling toolchain to \e[97m$TOOLCHAIN_DIR\e[0m" print_msg "Checking utilities..." @@ -75,7 +78,7 @@ print_ok "Successfully!" print_msg "Extracting files ..." cd $TOOLCHAIN_DIR -sudo 7z x -y kos32-toolchain.7z +sudo 7z x -y -bso0 -bsp0 kos32-toolchain.7z sudo rm -rf kos32-toolchain.7z print_ok "Successfully!" @@ -86,7 +89,7 @@ print_msg "Downloading libraries..." cd $TOOLCHAIN_DIR/win32/mingw32 sudo wget http://ftp.kolibrios.org/users/Serge/new/Toolchain/sdk-28-10-16.7z -q -O sdk-28-10-16.7z -sudo 7z x -y sdk-28-10-16.7z +sudo 7z x -y -bso0 -bsp0 sdk-28-10-16.7z sudo rm -rf sdk-28-10-16.7z print_ok "Successfully!" @@ -96,15 +99,9 @@ print_ok "Successfully!" print_msg "Updating libraries" cd lib -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libdll.a -q -O libdll.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libfreetype.a -q -O libfreetype.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libc.dll.a -q -O libc.dll.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libSDLn.a -q -O libSDLn.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libcurses.a -q -O libcurses.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libz.dll.a -q -O libz.dll.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libogg.a -q -O libogg.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libvorbis.a -q -O libvorbis.a -sudo wget http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/libopenjpeg.a -q -O libopenjpeg.a +sudo wget -r --no-parent -q http://builds.kolibrios.org/en_US/data/contrib/sdk/lib/ +sudo mv builds.kolibrios.org/en_US/data/contrib/sdk/lib/* ./ +sudo rm -R builds.kolibrios.org print_ok "Successfully!" @@ -114,10 +111,10 @@ print_msg "Downloading libisl..." cd /tmp sudo wget http://board.kolibrios.org/download/file.php?id=8301libisl.so.10.2.2.7z -q -O /tmp/libisl.so.10.2.2.7z -sudo 7z x -y libisl.so.10.2.2.7z +sudo 7z x -y -bso0 -bsp0 libisl.so.10.2.2.7z if ! [ -d /usr/lib/x86_64-linux-gnu/ ]; then - sudo mkdir -p /usr/lib/x86_64-linux-gnu/ + sudo mkdir -p /usr/lib/x86_64-linux-gnu/ fi sudo mv /tmp/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 @@ -138,7 +135,7 @@ print_ok "Successfully!" if [ "$TOOLCHAIN_DIR" != "$DEFAULT_TOOLCHAIN_DIR" ]; then - sudo ln -sf $TOOLCHAIN_DIR/win32 $DEFAULT_TOOLCHAIN_DIR + sudo ln -sf $TOOLCHAIN_DIR/win32 $DEFAULT_TOOLCHAIN_DIR fi @@ -150,19 +147,20 @@ if [ ! "$(id -u)" -ne 0 ] then echo $MESSAGE >> /etc/profile - sudo mkdir -p /etc/kos32-gcc - echo $TOOLCHAIN_DIR > /etc/kos32-gcc/install-path + sudo mkdir -p /etc/kos32-gcc + echo $TOOLCHAIN_DIR > /etc/kos32-gcc/install-path else - if ! grep -q $EXPORT_MESSSAGE ~/.bashrc; then - print_msg "Adding '$TOOLCHAIN_DIR/win32/bin' to '~/.bashrc'" - echo '$EXPORT_MESSSAGE' >> ~/.bashrc - fi + if ! grep -q $EXPORT_MESSSAGE ~/.bashrc; then + print_msg "Adding '$TOOLCHAIN_DIR/win32/bin' to '~/.bashrc'" + echo '$EXPORT_MESSSAGE' >> ~/.bashrc + fi fi sudo chmod 775 $TOOLCHAIN_DIR/win32/bin/* -sudo chmod 775 $TOOLCHAIN_DIR/win32/include/* -sudo chmod 775 $TOOLCHAIN_DIR/win32/lib/gcc/mingw32/5.4.0/include/* -sudo chmod 775 $TOOLCHAIN_DIR/win32/lib/gcc/mingw32/5.4.0/include/c++/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/include/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/lib/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/mingw32/lib/* +sudo chmod -R 775 /home/autobuild/tools/win32/lib/gcc cd "$OLDPWD" diff --git a/installator.iss b/installator.iss index f48e834..ee0a4f9 100644 --- a/installator.iss +++ b/installator.iss @@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "KolibriOS gcc toolchain" -#define MyAppVersion "0.1.4" +#define MyAppVersion "0.1.5" #define MyAppPublisher "Egor00f" #define MyAppURL "https://github.com/Egor00f/kolibrios-gcc-toolchain" @@ -65,18 +65,25 @@ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environmen Check: NeedsAddPath('{app}\win32\bin') [Files] -Source: ".\install.bat"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\bat\downloadToolchain.bat"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\bat\downloadLibraries.bat"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\bat\updateLibraries.bat"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs + ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Run] -Filename: "{app}\install.bat"; description: "install script"; StatusMsg: "Installing toolchain"; Parameters: "{app}"; Flags: runhidden logoutput +Filename: "{app}\downloadToolchain.bat"; description: "install toolchain script"; StatusMsg: "Installing toolchain"; Parameters: "{app}"; Flags: runhidden logoutput +Filename: "{app}\downloadLibraries.bat"; description: "download libraries script"; StatusMsg: "Download libraries"; Parameters: "{app}"; Flags: runhidden logoutput +Filename: "{app}\updateLibraries.bat"; description: "update libraries script"; StatusMsg: "Updating libraries"; Parameters: "{app}"; Flags: runhidden logoutput +Filename: "{app}\cleanArchives.bat"; description: "Delete downloaded archives script"; StatusMsg: "Delete downloaded archives"; Parameters: "{app}"; Flags: runhidden logoutput [Icons] Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" [UninstallDelete] -Type: files; Name: "{app}\*" +Type: files; Name: "{app}" +Type: filesandordirs; Name: "{app}\win32" [Code] function NeedsAddPath(Param: string): boolean; @@ -93,4 +100,4 @@ begin { look for the path with leading and trailing semicolon } { Pos() returns 0 if not found } Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0; -end; \ No newline at end of file +end; diff --git a/package/DEBIAN/control b/package/DEBIAN/control index 31fdda7..79a4fb7 100755 --- a/package/DEBIAN/control +++ b/package/DEBIAN/control @@ -1,14 +1,16 @@ -Package: kos32-gcc -Version: 0.1.4 -Architecture: all -Section: devel -Depends: libc6-i386:amd64, libmpc3:amd64 -Pre-Depends: p7zip-full, wget -Recommends: fasm -Priority: optional -Homepage: https://github.com/Egor00f/kolibrios-gcc-toolchain -Origin: http://ftp.kolibrios.org/users/Serge/new/Toolchain -Maintainer: Egor00f +Package: kos32-gcc +Version: 0.1.8 +Architecture: amd64 +Section: devel +Depends: libc6-i386:amd64, + libmpc3:amd64 +Pre-Depends: p7zip-full, + wget +Recommends: fasm +Priority: optional +Homepage: https://github.com/Egor00f/kolibrios-gcc-toolchain +Origin: http://ftp.kolibrios.org/users/Serge/new/Toolchain +Maintainer: Egor00f Installed-Size: 131708 Description: KolibriOS gcc toolchain installer This package installing KolibriOS gcc toolchain by Serge. diff --git a/package/DEBIAN/postinst b/package/DEBIAN/postinst new file mode 100755 index 0000000..1d12e54 --- /dev/null +++ b/package/DEBIAN/postinst @@ -0,0 +1,133 @@ +#!/bin/bash + +# Written by turbocat2001 (Maxim Logaev) +# Installation steps described by maxcodehack (Maxim Kuzmitsky) +# modified by Egor00f (Egor) + +set -e +pwd + +CONFIG_FOLDER="/etc/kos32-gcc" +INSTALL_PATH_FILE="$CONFIG_FOLDER/install-path" +DEFAULT_TOOLCHAIN_DIR="/home/autobuild/tools" + + +print_msg(){ + echo -e "\e[34m$1\e[0m" +} + +print_ok(){ + echo -e "\e[32m$1\e[0m" +} + +print_err(){ + echo -e "\e[31m$1\e[0m" + exit +} + +check_utils(){ + printf "%s: " $1 + if command -v $1 &> /dev/null + then + print_ok "ok\r" + else + print_err "no\r" + fi +} + +TOOLCHAIN_DIR=$(head -n 1 $INSTALL_PATH_FILE) +echo -n -e "\e[0mToolchain install path \e[90m(default is $TOOLCHAIN_DIR)\e[97m: " +read INPUT + +if [[ ! -z "$INPUT" ]]; then + TOOLCHAIN_DIR=$INPUT +fi + +echo -e "\e[0mInstalling toolchain to \e[97m$TOOLCHAIN_DIR\e[0m" + + +print_msg "Checking utilities..." + +check_utils wget +check_utils 7z + + + +print_msg "Create the toolchain folders..." + +sudo mkdir -p $DEFAULT_TOOLCHAIN_DIR +sudo mkdir -p $TOOLCHAIN_DIR + +print_ok "Successfully!" + +print_msg "Extracting toolchain ..." + +sudo 7z x -y -bso0 -bsp0 $DEFAULT_TOOLCHAIN_DIR/kos32-toolchain-linux.7z -o$TOOLCHAIN_DIR +sudo rm -rf $DEFAULT_TOOLCHAIN_DIR/kos32-toolchain-linux.7z + +print_ok "Successfully!" + + + + +print_msg "Extracting libraries..." + +cd $TOOLCHAIN_DIR/win32/mingw32 +sudo 7z x -y -bso0 -bsp0 $DEFAULT_TOOLCHAIN_DIR/lib.7z +sudo rm -rf $DEFAULT_TOOLCHAIN_DIR/lib.7z + +print_ok "Successfully!" + + + +if ! [ -d /usr/lib/x86_64-linux-gnu/ ]; then + sudo mkdir -p /usr/lib/x86_64-linux-gnu/ +fi + +sudo ln -sf /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10 +sudo ln -sf /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/libisl.so.10 +sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10 +sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 + +print_ok "Successfully!" + + +print_msg "Fixing libmpfr..." + +sudo ln -sf /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4 +sudo ln -sf /usr/lib/libmpfr.so.6 /usr/lib/libmpfr.so.4 + +print_ok "Successfully!" + + +if [ "$TOOLCHAIN_DIR" != "$DEFAULT_TOOLCHAIN_DIR" ]; then + sudo ln -sf $TOOLCHAIN_DIR/win32 $DEFAULT_TOOLCHAIN_DIR +fi + + +MESSAGE="PATH=\$PATH:$TOOLCHAIN_DIR/win32/bin" + +EXPORT_MESSSAGE="export $MESSAGE" + +if [ ! "$(id -u)" -ne 0 ] +then + echo $MESSAGE >> /etc/profile + echo $TOOLCHAIN_DIR > $INSTALL_PATH_FILE +else + if ! grep -q $EXPORT_MESSSAGE ~/.bashrc; then + print_msg "Adding '$TOOLCHAIN_DIR/win32/bin' to '~/.bashrc'" + echo '$EXPORT_MESSSAGE' >> ~/.bashrc + fi +fi + +sudo chmod 775 $TOOLCHAIN_DIR/win32/bin/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/include/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/lib/* +sudo chmod 774 $TOOLCHAIN_DIR/win32/mingw32/lib/* +sudo chmod -R 775 /home/autobuild/tools/win32/lib/gcc + +cd "$OLDPWD" + +export PATH=$PATH:$TOOLCHAIN_DIR/win32/bin + +print_ok "Installation was successful!" diff --git a/package/DEBIAN/postrm b/package/DEBIAN/postrm index 20eddeb..5048e26 100755 --- a/package/DEBIAN/postrm +++ b/package/DEBIAN/postrm @@ -1,12 +1,17 @@ #!/bin/bash +CONFIG_FOLDER="/etc/kos32-gcc" +INSTALL_PATH_FILE="$CONFIG_FOLDER/install-path" +DEFAULT_TOOLCHAIN_DIR="/home/autobuild/tools" + + TOOLCHAIN_DIR=$(head -n 1 /etc/kos32-gcc/install-path) -MESSAGE="PATH=\$PATH:$TOOLCHAIN_DIR/win32/bin" -if grep -q '$MESSAGE' /etc/profile; then - sudo sed -i '/$MESSAGE/d' /etc/profile -fi +FULL_PATH="$TOOLCHAIN_DIR/win32/bin" +CHR="/" +REPLACE_TO="\/" -rm /etc/kos32-gcc -R +MESSAGE="${FULL_PATH//$CHR/"$REPLACE_TO"}" +sudo sed -i -e '/'$MESSAGE'/d' /etc/profile diff --git a/package/DEBIAN/prerm b/package/DEBIAN/prerm index a58ff21..78e120e 100755 --- a/package/DEBIAN/prerm +++ b/package/DEBIAN/prerm @@ -1,7 +1,12 @@ #!/bin/bash -TOOLCHAIN_DIR=$(head -n 1 /etc/kos32-gcc/install-path) +CONFIG_FOLDER="/etc/kos32-gcc" +INSTALL_PATH_FILE="$CONFIG_FOLDER/install-path" +DEFAULT_TOOLCHAIN_DIR="/home/autobuild/tools" -rm -R $TOOLCHAIN_DIR -rm -R /home/autobuild +TOOLCHAIN_DIR=$(head -n 1 $INSTALL_PATH_FILE) + +rm -Rf $TOOLCHAIN_DIR + +rm -Rf /home/autobuild diff --git a/package/etc/kos32-gcc/install-path b/package/etc/kos32-gcc/install-path new file mode 100644 index 0000000..d35b78f --- /dev/null +++ b/package/etc/kos32-gcc/install-path @@ -0,0 +1 @@ +/home/autobuild/tools