git-subtree-dir: third_party/nixpkgs git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
273 lines
8.1 KiB
Nix
273 lines
8.1 KiB
Nix
{ fetchFromGitHub
|
|
, fetchurl
|
|
, lib
|
|
, linkFarm
|
|
, makeWrapper
|
|
, runCommand
|
|
, stdenv
|
|
, stdenvNoCC
|
|
, rustPlatform
|
|
|
|
, ant
|
|
, cmake
|
|
, glib
|
|
, jetbrains
|
|
, kotlin
|
|
, libdbusmenu
|
|
, maven
|
|
, p7zip
|
|
, pkg-config
|
|
, xorg
|
|
|
|
, buildVer
|
|
, buildType
|
|
, ideaHash
|
|
, androidHash
|
|
, jpsHash
|
|
, restarterHash
|
|
, mvnDeps
|
|
}:
|
|
|
|
let
|
|
|
|
jbr = jetbrains.jdk-no-jcef-17;
|
|
|
|
ideaSrc = fetchFromGitHub {
|
|
owner = "jetbrains";
|
|
repo = "intellij-community";
|
|
rev = "${buildType}/${buildVer}";
|
|
hash = ideaHash;
|
|
};
|
|
|
|
androidSrc = fetchFromGitHub {
|
|
owner = "jetbrains";
|
|
repo = "android";
|
|
rev = "${buildType}/${buildVer}";
|
|
hash = androidHash;
|
|
};
|
|
|
|
src = runCommand "source" { } ''
|
|
cp -r ${ideaSrc} $out
|
|
chmod +w -R $out
|
|
cp -r ${androidSrc} $out/android
|
|
'';
|
|
|
|
libdbusmenu-jb = libdbusmenu.overrideAttrs (old: {
|
|
version = "jetbrains-fork";
|
|
src = fetchFromGitHub {
|
|
owner = "jetbrains";
|
|
repo = "libdbusmenu";
|
|
rev = "d8a49303f908a272e6670b7cee65a2ba7c447875";
|
|
hash = "sha256-u87ZgbfeCPJ0qG8gsom3gFaZxbS5NcHEodb0EVakk60=";
|
|
};
|
|
configureFlags = old.configureFlags ++ [
|
|
"--enable-static"
|
|
];
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/lib
|
|
cp libdbusmenu-glib/.libs/libdbusmenu-glib.a $out/lib
|
|
|
|
runHook postInstall
|
|
'';
|
|
});
|
|
|
|
libdbm = stdenv.mkDerivation {
|
|
pname = "libdbm";
|
|
version = buildVer;
|
|
nativeBuildInputs = [ cmake pkg-config ];
|
|
buildInputs = [ glib xorg.libX11 libdbusmenu ];
|
|
inherit src;
|
|
sourceRoot = "${src.name}/native/LinuxGlobalMenu";
|
|
patches = [ ../patches/libdbm-headers.patch ];
|
|
postPatch = "cp ${libdbusmenu-jb}/lib/libdbusmenu-glib.a libdbusmenu-glib.a";
|
|
passthru.patched-libdbusmenu = libdbusmenu-jb;
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/lib
|
|
mv libdbm.so $out/lib/libdbm.so
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
fsnotifier = stdenv.mkDerivation {
|
|
pname = "fsnotifier";
|
|
version = buildVer;
|
|
inherit src;
|
|
sourceRoot = "${src.name}/native/fsNotifier/linux";
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
$CC -O2 -Wall -Wextra -Wpedantic -D "VERSION=\"${buildVer}\"" -std=c11 main.c inotify.c util.c -o fsnotifier
|
|
runHook postBuild
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out/bin
|
|
mv fsnotifier $out/bin
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
restarter = rustPlatform.buildRustPackage {
|
|
pname = "restarter";
|
|
version = buildVer;
|
|
inherit src;
|
|
sourceRoot = "${src.name}/native/restarter";
|
|
cargoHash = restarterHash;
|
|
};
|
|
|
|
jpsRepo = runCommand "jps-bootstrap-repository"
|
|
{
|
|
outputHashAlgo = "sha256";
|
|
outputHashMode = "recursive";
|
|
outputHash = jpsHash;
|
|
nativeBuildInputs = [ ant jbr ];
|
|
} ''
|
|
ant -Duser.home=$out -Dbuild.dir=/build/tmp -f ${src}/platform/jps-bootstrap/jps-bootstrap-classpath.xml
|
|
find $out -type f \( \
|
|
-name \*.lastUpdated \
|
|
-o -name resolver-status.properties \
|
|
-o -name _remote.repositories \) \
|
|
-delete
|
|
'';
|
|
|
|
jps-bootstrap = stdenvNoCC.mkDerivation {
|
|
pname = "jps-bootstrap";
|
|
version = buildVer;
|
|
inherit src;
|
|
sourceRoot = "${src.name}/platform/jps-bootstrap";
|
|
nativeBuildInputs = [ ant makeWrapper jbr ];
|
|
patches = [ ../patches/kotlinc-path.patch ];
|
|
postPatch = "sed -i 's|KOTLIN_PATH_HERE|${kotlin}|' src/main/java/org/jetbrains/jpsBootstrap/KotlinCompiler.kt";
|
|
buildPhase = ''
|
|
runHook preInstall
|
|
|
|
ant -Duser.home=${jpsRepo} -Dbuild.dir=/build/out -f jps-bootstrap-classpath.xml
|
|
|
|
runHook postInstall
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/share/java/
|
|
cp /build/out/jps-bootstrap.classes.jar $out/share/java/jps-bootstrap.jar
|
|
cp -r /build/out/jps-bootstrap.out.lib $out/share/java/jps-bootstrap-classpath
|
|
makeWrapper ${jbr}/bin/java $out/bin/jps-bootstrap \
|
|
--add-flags "-cp $out/share/java/jps-bootstrap-classpath/'*' org.jetbrains.jpsBootstrap.JpsBootstrapMain"
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
artefactsJson = lib.importJSON mvnDeps;
|
|
mkRepoEntry = entry: {
|
|
name = ".m2/repository/" + entry.path;
|
|
path = fetchurl {
|
|
urls = [
|
|
"https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/${entry.url}"
|
|
"https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/${entry.url}"
|
|
"https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-ide-plugin-dependencies/${entry.url}"
|
|
"https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/grazi/grazie-platform-public/${entry.url}"
|
|
"https://cache-redirector.jetbrains.com/dl.google.com/dl/android/maven2/${entry.url}"
|
|
"https://packages.jetbrains.team/maven/p/kpm/public/${entry.url}"
|
|
"https://packages.jetbrains.team/maven/p/ki/maven/${entry.url}"
|
|
"https://packages.jetbrains.team/maven/p/dpgpv/maven/${entry.url}"
|
|
"https://cache-redirector.jetbrains.com/download.jetbrains.com/teamcity-repository/${entry.url}"
|
|
];
|
|
sha256 = entry.hash;
|
|
};
|
|
};
|
|
mvnRepo = linkFarm "intellij-deps" (map mkRepoEntry artefactsJson);
|
|
|
|
kotlin-jps-plugin-classpath =
|
|
let
|
|
repoUrl = "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-ide-plugin-dependencies";
|
|
groupId = builtins.replaceStrings [ "." ] [ "/" ] "org.jetbrains.kotlin";
|
|
artefactId = "kotlin-jps-plugin-classpath";
|
|
version = "1.9.22";
|
|
in
|
|
fetchurl {
|
|
url = repoUrl + "/" + groupId + "/" + artefactId + "/" + version + "/" + artefactId + "-" + version + ".jar";
|
|
hash = "sha256-ZPfEceGoIChDmjIAjjhDZpyMWQ7/DtP9Ll4YIrZN+PM=";
|
|
};
|
|
|
|
targetClass = if buildType == "pycharm" then "intellij.pycharm.community.build" else "intellij.idea.community.build";
|
|
targetName = if buildType == "pycharm" then "PyCharmCommunityInstallersBuildTarget" else "OpenSourceCommunityInstallersBuildTarget";
|
|
|
|
in
|
|
stdenvNoCC.mkDerivation rec {
|
|
pname = "${buildType}-community";
|
|
version = buildVer;
|
|
name = "${pname}-${version}.tar.gz";
|
|
inherit src;
|
|
nativeBuildInputs = [ p7zip jbr jps-bootstrap ];
|
|
repo = mvnRepo;
|
|
|
|
patches = [
|
|
../patches/no-download.patch
|
|
../patches/disable-sbom-generation.patch
|
|
];
|
|
|
|
postPatch = ''
|
|
cp ${restarter}/bin/restarter bin/linux/amd64/restarter
|
|
cp ${fsnotifier}/bin/fsnotifier bin/linux/amd64/fsnotifier
|
|
cp ${libdbm}/lib/libdbm.so bin/linux/amd64/libdbm.so
|
|
|
|
sed \
|
|
-e 's|JPS_PLUGIN_CLASSPATH_HERE|${kotlin-jps-plugin-classpath}|' \
|
|
-e 's|KOTLIN_PATH_HERE|${kotlin}|' \
|
|
-i platform/build-scripts/src/org/jetbrains/intellij/build/kotlin/KotlinCompilerDependencyDownloader.kt
|
|
sed \
|
|
-e 's|JDK_PATH_HERE|${jbr}/lib/openjdk|' \
|
|
-i platform/build-scripts/downloader/src/org/jetbrains/intellij/build/dependencies/JdkDownloader.kt
|
|
sed \
|
|
-e 's|BROKEN_PLUGINS_HERE|${./brokenPlugins.json}|' \
|
|
-i platform/build-scripts/src/org/jetbrains/intellij/build/impl/brokenPlugins.kt
|
|
sed \
|
|
-e 's|MAVEN_REPO_HERE|${mvnRepo}/.m2/repository/|' \
|
|
-e 's|MAVEN_PATH_HERE|${maven}/maven|' \
|
|
-i build/deps/src/org/jetbrains/intellij/build/impl/BundledMavenDownloader.kt
|
|
echo '${buildVer}.SNAPSHOT' > build.txt
|
|
'';
|
|
|
|
configurePhase = ''
|
|
runHook preConfigure
|
|
|
|
ln -s "$repo"/.m2 /build/.m2
|
|
export JPS_BOOTSTRAP_COMMUNITY_HOME=/build/source
|
|
jps-bootstrap \
|
|
-Dbuild.number=${buildVer} \
|
|
-Djps.kotlin.home=${kotlin} \
|
|
-Dintellij.build.target.os=linux \
|
|
-Dintellij.build.target.arch=x64 \
|
|
-Dintellij.build.skip.build.steps=mac_artifacts,mac_dmg,mac_sit,windows_exe_installer,windows_sign,repair_utility_bundle_step \
|
|
-Dintellij.build.unix.snaps=false \
|
|
--java-argfile-target=java_argfile \
|
|
/build/source \
|
|
${targetClass} \
|
|
${targetName}
|
|
|
|
runHook postConfigure
|
|
'';
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
java \
|
|
-Djps.kotlin.home=${kotlin} \
|
|
"@java_argfile"
|
|
|
|
runHook postBuild
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mv out/*/artifacts/*-no-jbr.tar.gz $out
|
|
runHook postInstall
|
|
'';
|
|
|
|
passthru = {
|
|
inherit libdbm fsnotifier jps-bootstrap;
|
|
};
|
|
}
|