Compare commits
8 commits
main
...
wip/pkgs/u
Author | SHA1 | Date | |
---|---|---|---|
f4a5a3e0e5 | |||
f92651afdf | |||
6d32f8da73 | |||
35259d4999 | |||
4aa2e34ff6 | |||
80a41ef45d | |||
ea8ac1c2c6 | |||
73142b030f |
3 changed files with 387 additions and 0 deletions
81
pkgs/by-name/up/upp/buildUppPackage.nix
Normal file
81
pkgs/by-name/up/upp/buildUppPackage.nix
Normal file
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
lib,
|
||||
pkg-config,
|
||||
stdenv,
|
||||
upp,
|
||||
}:
|
||||
|
||||
{
|
||||
assembly ? ".",
|
||||
extraAssemblies ? [],
|
||||
includeUppsrcAssembly ? true,
|
||||
package,
|
||||
flags ? [],
|
||||
buildMethod ? if stdenv.cc.isClang then "CLANG" else "GCC",
|
||||
buildShared ? false,
|
||||
...
|
||||
}@args:
|
||||
|
||||
let
|
||||
flagsString = lib.optionalString (flags != []) ( "+" + lib.concatStringsSep "," flags);
|
||||
output = if buildShared then "lib/${package}.so" else "bin/${package}";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (self: {
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
upp
|
||||
] ++ args.nativeBuildInputs or [];
|
||||
|
||||
buildInputs = upp.uppsrcDependencies ++ args.buildInputs or [];
|
||||
|
||||
assemblies = lib.concatStringsSep "," (
|
||||
lib.singleton assembly
|
||||
++ extraAssemblies
|
||||
++ lib.optional includeUppsrcAssembly "${upp.src}/uppsrc"
|
||||
);
|
||||
|
||||
postUnpack = ''
|
||||
mkdir -p .home
|
||||
export HOME=$(realpath .home)
|
||||
'';
|
||||
|
||||
UPP_NO_BUILD_INFO = true;
|
||||
|
||||
# https://www.ultimatepp.org/app$ide$umk$en-us.html
|
||||
# s - use shared libraries
|
||||
# S - use shared libraries and build shared libraries
|
||||
# u - use target directory
|
||||
# v - verbose
|
||||
# r - release mode
|
||||
|
||||
# FIXME: writing to $out should be done in the install phase
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
mkdir -p $out/${if buildShared then "lib" else "bin"}
|
||||
|
||||
umk \
|
||||
"$assemblies" \
|
||||
${lib.escapeShellArg package} \
|
||||
${buildMethod} \
|
||||
-${if buildShared then "S" else "s"}uvr "-H$NIX_BUILD_CORES" \
|
||||
${flagsString} \
|
||||
$out/${output}
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
# Don't run installPhase unless the user explicitly provides it
|
||||
dontInstall = !lib.hasAttr "installPhase" args;
|
||||
} // lib.removeAttrs args [
|
||||
"assembly"
|
||||
"extraAssemblies"
|
||||
"includeUppsrcAssembly"
|
||||
"package"
|
||||
"flags"
|
||||
"buildMethod"
|
||||
"buildShared"
|
||||
"nativeBuildInputs"
|
||||
"buildInputs"
|
||||
])
|
131
pkgs/by-name/up/upp/no-build-info.patch
Normal file
131
pkgs/by-name/up/upp/no-build-info.patch
Normal file
|
@ -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)
|
175
pkgs/by-name/up/upp/package.nix
Normal file
175
pkgs/by-name/up/upp/package.nix
Normal file
|
@ -0,0 +1,175 @@
|
|||
{
|
||||
lib,
|
||||
callPackage,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
makeWrapper,
|
||||
pkg-config,
|
||||
stdenv,
|
||||
makeDesktopItem,
|
||||
copyDesktopItems,
|
||||
|
||||
# pkg-config dependencies
|
||||
libpng,
|
||||
freetype,
|
||||
fontconfig,
|
||||
xorg,
|
||||
expat,
|
||||
gtk3,
|
||||
libnotify,
|
||||
|
||||
# other dependencies
|
||||
libclang,
|
||||
openssl,
|
||||
}:
|
||||
|
||||
let
|
||||
buildMethod = if stdenv.cc.isClang then "CLANG" else "GCC";
|
||||
uppsrcDependencies = [
|
||||
expat
|
||||
fontconfig
|
||||
freetype
|
||||
gtk3
|
||||
libnotify
|
||||
libpng
|
||||
openssl
|
||||
xorg.libX11
|
||||
xorg.libXdmcp
|
||||
xorg.libXext
|
||||
xorg.libXft
|
||||
xorg.libXinerama
|
||||
xorg.libXrender
|
||||
xorg.libxcb
|
||||
];
|
||||
in stdenv.mkDerivation (self: let
|
||||
selfBootstrap = self.overrideAttrs (selfAttrs: superAttrs: {
|
||||
passthru = superAttrs.passthru // {
|
||||
bootstrap = true;
|
||||
};
|
||||
});
|
||||
in {
|
||||
pname = "upp";
|
||||
version = "2025.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ultimatepp";
|
||||
repo = "ultimatepp";
|
||||
tag = "2025.1";
|
||||
hash = "sha256-/hsjQvc5+HxyaytZ5kryhSxbuaAx0eXuH285q7NPiiw=";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
pkg-config
|
||||
] ++ lib.optional (!self.passthru.bootstrap) copyDesktopItems;
|
||||
|
||||
buildInputs = uppsrcDependencies ++ lib.optional (!self.passthru.bootstrap) libclang;
|
||||
|
||||
patches = [
|
||||
./no-build-info.patch
|
||||
(fetchpatch {
|
||||
# https://github.com/ultimatepp/ultimatepp/pull/271
|
||||
url = "https://github.com/ultimatepp/ultimatepp/commit/db5cad68673f9571e6571116e0570e22e3e44fe8.patch";
|
||||
hash = "sha256-t2PducjE6b5MjDSAIKvEMdHnT8oTGmI073qYuhLFCh0=";
|
||||
})
|
||||
];
|
||||
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 "-H$NIX_BUILD_CORES"
|
||||
${lib.getExe' selfBootstrap "umk"} uppsrc umk ${buildMethod} -rvs "-H$NIX_BUILD_CORES"
|
||||
'') + ''
|
||||
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
|
||||
|
||||
mkdir -p $out/share/icons/hicolor/scalable/apps
|
||||
cp uppsrc/ide/icon.svg $out/share/icons/hicolor/scalable/apps/upp-theide.svg
|
||||
for size in 16 32 64 128 256 512; do
|
||||
mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
|
||||
cp uppsrc/ide/icon''${size}x''${size}.png $out/share/icons/hicolor/''${size}x''${size}/apps/upp-theide.png
|
||||
done
|
||||
'') + ''
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "upp-theide";
|
||||
exec = "theide";
|
||||
icon = "upp-theide";
|
||||
desktopName = "TheIDE";
|
||||
comment = "The U++ Framework IDE";
|
||||
categories = [ "Development" "IDE" ];
|
||||
terminal = false;
|
||||
})
|
||||
];
|
||||
|
||||
passthru = {
|
||||
bootstrap = false;
|
||||
inherit uppsrcDependencies;
|
||||
buildUppPackage = callPackage ./buildUppPackage.nix {};
|
||||
tests = lib.genAttrs [
|
||||
"AddressBookXML2"
|
||||
"Bombs"
|
||||
"Days"
|
||||
"SQLApp"
|
||||
"httpcli"
|
||||
] (examplePackageName: self.passthru.buildUppPackage {
|
||||
pname = examplePackageName;
|
||||
version = self.version;
|
||||
package = examplePackageName;
|
||||
src = self.src;
|
||||
includeUppsrcAssembly = false;
|
||||
buildInputs = self.passthru.uppsrcDependencies;
|
||||
assembly = "examples";
|
||||
extraAssemblies = [
|
||||
"uppsrc"
|
||||
];
|
||||
});
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://www.ultimatepp.org";
|
||||
description = "C++ cross-platform rapid application development framework";
|
||||
license = lib.licenses.bsd2;
|
||||
mainProgram = "umk";
|
||||
};
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue