From 73142b030fdf75be9e1dd9b1465f7394abbc5f90 Mon Sep 17 00:00:00 2001 From: Wroclaw Date: Sun, 18 May 2025 20:36:55 +0200 Subject: [PATCH] pkgs/ultimatepp: init at 2025.1 --- .../by-name/ul/ultimatepp/no-build-info.patch | 131 ++++++++++++++++++ pkgs/by-name/ul/ultimatepp/package.nix | 129 +++++++++++++++++ ...-inline-from-HighlightSetup-InitOnce.patch | 13 ++ 3 files changed, 273 insertions(+) create mode 100644 pkgs/by-name/ul/ultimatepp/no-build-info.patch create mode 100644 pkgs/by-name/ul/ultimatepp/package.nix create mode 100644 pkgs/by-name/ul/ultimatepp/remove-inline-from-HighlightSetup-InitOnce.patch diff --git a/pkgs/by-name/ul/ultimatepp/no-build-info.patch b/pkgs/by-name/ul/ultimatepp/no-build-info.patch new file mode 100644 index 0000000..639ca12 --- /dev/null +++ b/pkgs/by-name/ul/ultimatepp/no-build-info.patch @@ -0,0 +1,131 @@ +diff --git a b +index a3e9af6..0ff3dd8 100644 +--- a/Makefile ++++ b/Makefile +@@ -100,8 +100,14 @@ all: prepare $(OutFile) + .PHONY: build_info + build_info: +- (date '+#define bmYEAR %y%n#define bmMONTH %m%n#define bmDAY %d%n#define bmHOUR %H%n#define bmMINUTE %M%n#define bmSECOND %S%n#define bmTIME Time( %y, %m, %d, %H, %M, %S )' | sed 's| 0\([[:digit:]]\)| \1|g' && \ +- echo '#define bmMACHINE "'`hostname`'"' && \ +- echo '#define bmUSER "'`whoami`'"') > "$(UPPOUT)/build_info.h" ++ (echo '#define bmYEAR 1970' && \ ++ echo '#define bmMONTH 1' && \ ++ echo '#define bmDAY 1' && \ ++ echo '#define bmHOUR 0' && \ ++ echo '#define bmMINUTE 0' && \ ++ echo '#define bmSECOND 1' && \ ++ echo '#define bmTIME Time(1970, 1, 1, 0, 0, 1)' && \ ++ echo '#define bmMACHINE ""' && \ ++ echo '#define bmUSER ""') > "$(UPPOUT)/build_info.h" + + .PHONY: prepare + prepare: \ +index a3e9af6..0ff3dd8 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -100,8 +100,14 @@ all: prepare $(OutFile) + .PHONY: build_info + build_info: +- (date '+#define bmYEAR %y%n#define bmMONTH %m%n#define bmDAY %d%n#define bmHOUR %H%n#define bmMINUTE %M%n#define bmSECOND %S%n#define bmTIME Time( %y, %m, %d, %H, %M, %S )' | sed 's| 0\([[:digit:]]\)| \1|g' && \ +- echo '#define bmMACHINE "'`hostname`'"' && \ +- echo '#define bmUSER "'`whoami`'"') > "$(UPPOUT)/build_info.h" ++ (echo '#define bmYEAR 1970' && \ ++ echo '#define bmMONTH 1' && \ ++ echo '#define bmDAY 1' && \ ++ echo '#define bmHOUR 0' && \ ++ echo '#define bmMINUTE 0' && \ ++ echo '#define bmSECOND 1' && \ ++ echo '#define bmTIME Time(1970, 1, 1, 0, 0, 1)' && \ ++ echo '#define bmMACHINE ""' && \ ++ echo '#define bmUSER ""') > "$(UPPOUT)/build_info.h" + + .PHONY: prepare + prepare: \ +--- a/umkMakefile ++++ b/umkMakefile +@@ -52,8 +52,14 @@ all: prepare $(OutFile) + .PHONY: build_info + build_info: +- (date '+#define bmYEAR %y%n#define bmMONTH %m%n#define bmDAY %d%n#define bmHOUR %H%n#define bmMINUTE %M%n#define bmSECOND %S%n#define bmTIME Time( %y, %m, %d, %H, %M, %S )' | sed 's| 0\([[:digit:]]\)| \1|g' && \ +- echo '#define bmMACHINE "'`hostname`'"' && \ +- echo '#define bmUSER "'`whoami`'"') > "$(UPPOUT)/build_info.h" ++ (echo '#define bmYEAR 1970' && \ ++ echo '#define bmMONTH 1' && \ ++ echo '#define bmDAY 1' && \ ++ echo '#define bmHOUR 0' && \ ++ echo '#define bmMINUTE 0' && \ ++ echo '#define bmSECOND 1' && \ ++ echo '#define bmTIME Time(1970, 1, 1, 0, 0, 1)' && \ ++ echo '#define bmMACHINE ""' && \ ++ echo '#define bmUSER ""') > "$(UPPOUT)/build_info.h" + + .PHONY: prepare + prepare: \ +--- a/umkMakefile.in ++++ b/umkMakefile.in +@@ -52,8 +52,14 @@ all: prepare $(OutFile) + .PHONY: build_info + build_info: +- (date '+#define bmYEAR %y%n#define bmMONTH %m%n#define bmDAY %d%n#define bmHOUR %H%n#define bmMINUTE %M%n#define bmSECOND %S%n#define bmTIME Time( %y, %m, %d, %H, %M, %S )' | sed 's| 0\([[:digit:]]\)| \1|g' && \ +- echo '#define bmMACHINE "'`hostname`'"' && \ +- echo '#define bmUSER "'`whoami`'"') > "$(UPPOUT)/build_info.h" ++ (echo '#define bmYEAR 1970' && \ ++ echo '#define bmMONTH 1' && \ ++ echo '#define bmDAY 1' && \ ++ echo '#define bmHOUR 0' && \ ++ echo '#define bmMINUTE 0' && \ ++ echo '#define bmSECOND 1' && \ ++ echo '#define bmTIME Time(1970, 1, 1, 0, 0, 1)' && \ ++ echo '#define bmMACHINE ""' && \ ++ echo '#define bmUSER ""') > "$(UPPOUT)/build_info.h" + + .PHONY: prepare + prepare: \ +--- a/uppsrc/ide/Builders/CppBuilder.cpp ++++ b/uppsrc/ide/Builders/CppBuilder.cpp +@@ -580,19 +580,32 @@ void CppBuilder::SaveBuildInfo(const String& package) + RealizePath(path); + FileOut info(path); + Time t = GetSysTime(); +- info << "#define bmYEAR " << (int)t.year << "\r\n"; +- info << "#define bmMONTH " << (int)t.month << "\r\n"; +- info << "#define bmDAY " << (int)t.day << "\r\n"; +- info << "#define bmHOUR " << (int)t.hour << "\r\n"; +- info << "#define bmMINUTE " << (int)t.minute << "\r\n"; +- info << "#define bmSECOND " << (int)t.second << "\r\n"; +- info << Format("#define bmTIME Time(%d, %d, %d, %d, %d, %d)\r\n", +- (int)t.year, (int)t.month, (int)t.day, (int)t.hour, (int)t.minute, (int)t.second); +- info << "#define bmMACHINE " << AsCString(GetComputerName()) << "\r\n"; +- info << "#define bmUSER " << AsCString(GetUserName()) << "\r\n"; +- +- if(package == mainpackage) +- info << Join(RepoInfo(package), "\r\n"); ++ char* no_build_info = getenv("NO_BUILD_INFO"); ++ if((no_build_info != NULL) && strcmp(no_build_info, "1")) { ++ info << "#define bmYEAR " << (int)t.year << "\r\n"; ++ info << "#define bmMONTH " << (int)t.month << "\r\n"; ++ info << "#define bmDAY " << (int)t.day << "\r\n"; ++ info << "#define bmHOUR " << (int)t.hour << "\r\n"; ++ info << "#define bmMINUTE " << (int)t.minute << "\r\n"; ++ info << "#define bmSECOND " << (int)t.second << "\r\n"; ++ info << Format("#define bmTIME Time(%d, %d, %d, %d, %d, %d)\r\n", ++ (int)t.year, (int)t.month, (int)t.day, (int)t.hour, (int)t.minute, (int)t.second); ++ info << "#define bmMACHINE " << AsCString(GetComputerName()) << "\r\n"; ++ info << "#define bmUSER " << AsCString(GetUserName()) << "\r\n"; ++ ++ if(package == mainpackage) ++ info << Join(RepoInfo(package), "\r\n"); ++ } else { ++ info << "#define bmYEAR 1970\r\n"; ++ info << "#define bmMONTH 1\r\n"; ++ info << "#define bmDAY 1\r\n"; ++ info << "#define bmHOUR 0\r\n"; ++ info << "#define bmMINUTE 0\r\n"; ++ info << "#define bmSECOND 1\r\n"; ++ info << "#define bmTIME Time(1970, 1, 1, 0, 0, 1)\r\n"; ++ info << "#define bmMACHINE \"\"\r\n"; ++ info << "#define bmUSER \"\"\r\n"; ++ } + } + + String CppBuilder::DefinesTargetTime(const char *sep, const String& package, const Package& pkg) diff --git a/pkgs/by-name/ul/ultimatepp/package.nix b/pkgs/by-name/ul/ultimatepp/package.nix new file mode 100644 index 0000000..187907d --- /dev/null +++ b/pkgs/by-name/ul/ultimatepp/package.nix @@ -0,0 +1,129 @@ +{ + lib, + fetchFromGitHub, + makeWrapper, + pkg-config, + stdenv, + + # pkg-config dependencies + libpng, + freetype, + fontconfig, + xorg, + expat, + gtk3, + libnotify, + + # other dependencies + libclang, + openssl, +}: + +let + buildMethod = if stdenv.cc.isClang then "CLANG" else "GCC"; +in stdenv.mkDerivation (self: let + selfBootstrap = self.overrideAttrs (selfAttrs: superAttrs: { + passthru = superAttrs.passthru // { + bootstrap = true; + }; + }); +in { + pname = "ultimatepp"; + version = "2025.1"; + + src = fetchFromGitHub { + owner = "ultimatepp"; + repo = "ultimatepp"; + tag = "2025.1"; + hash = "sha256-/hsjQvc5+HxyaytZ5kryhSxbuaAx0eXuH285q7NPiiw="; + }; + + enableParallelBuilding = true; + + nativeBuildInputs = [ + makeWrapper + pkg-config + ]; + + buildInputs = [ + # in the same order as in the Makefile + libpng + freetype + fontconfig + xorg.libX11 + xorg.libxcb + expat + xorg.libXinerama + xorg.libXrender + xorg.libXft + xorg.libXdmcp + xorg.libXext + gtk3 + libnotify + # not in the Makefile + openssl + ] ++ lib.optional (!self.passthru.bootstrap) libclang; + + patches = [ + ./no-build-info.patch + ./remove-inline-from-HighlightSetup-InitOnce.patch + ]; + postPatch = '' + patchShebangs ./configure_makefile + echo "#define IDE_VERSION \"${self.version}\"" > uppsrc/ide/version.h + '' + lib.optionalString (!self.passthru.bootstrap) '' + mkdir -p .home + export HOME=$(realpath .home) + ''; + + NIX_LDFLAGS = [ + "-L${libclang.lib}/lib" + "-lclang" + ]; + + NIX_CFLAGS_COMPILE = [ + "-DflagLCLANG" + ]; + + UPP_NO_BUILD_INFO = true; + + buildPhase = '' + runHook preBuild + '' + ( + # Don't build theide in bootstrap to save resources + if self.passthru.bootstrap then '' + make -f umkMakefile -j $NIX_BUILD_CORES "$makeFlagsArray" + '' else '' + ${lib.getExe' selfBootstrap "umk"} uppsrc ide ${buildMethod} -rvs + ${lib.getExe' selfBootstrap "umk"} uppsrc umk ${buildMethod} -rvs + '') + '' + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + '' + (if self.passthru.bootstrap then '' + mv ./umk $out/bin/umk + '' else '' + mv $HOME/.cache/upp.out/umk/${buildMethod}.Main.Shared/umk $out/bin/umk + mv $HOME/.cache/upp.out/ide/${buildMethod}.Gui.Main.Shared/ide $out/bin/theide + + wrapProgram $out/bin/theide \ + --unset WAYLAND_DISPLAY + '') + '' + runHook postInstall + ''; + + passthru = { + bootstrap = false; + }; + + meta = { + homepage = "https://www.ultimatepp.org"; + description = "C++ cross-platform rapid application development framework"; + license = lib.licenses.bsd2; + mainProgram = "umk"; + }; +}) diff --git a/pkgs/by-name/ul/ultimatepp/remove-inline-from-HighlightSetup-InitOnce.patch b/pkgs/by-name/ul/ultimatepp/remove-inline-from-HighlightSetup-InitOnce.patch new file mode 100644 index 0000000..1d86a43 --- /dev/null +++ b/pkgs/by-name/ul/ultimatepp/remove-inline-from-HighlightSetup-InitOnce.patch @@ -0,0 +1,13 @@ +diff --git a b +index eca1b54..dede1d5 100644 +--- a/uppsrc/CodeEditor/Style.cpp ++++ b/uppsrc/CodeEditor/Style.cpp +@@ -38,7 +38,7 @@ void HighlightSetup::DefaultHlStyles() + WhiteTheme(); + } + +-inline void HighlightSetup::InitOnce() ++void HighlightSetup::InitOnce() + { + ONCELOCK { + static bool initialised;