summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2018-06-18 00:07:06 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2018-06-18 00:52:16 +0200
commitd60127fd8c43b0c8c4dc572dc53464ee28a24f56 (patch)
tree25cf4f8b02880f9c6a197b5c7ca8fd7cee81d8a0 /pkgs
parent07d23845c319a260f101ee825ed9402ff117e87e (diff)
downloadnixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar.gz
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar.bz2
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar.lz
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar.xz
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.tar.zst
nixpkgs-d60127fd8c43b0c8c4dc572dc53464ee28a24f56.zip
nifskope: 1.1.3 -> 2.0.dev7
`nifskope` v2 contains a lot of new features and a new, QT5-based UI
(see https://github.com/niftools/nifskope/releases). Additionally the
2.0 sourcetree exists for quite a while and after some short user tests
it seems fairly stable.

The following aspects have been changed:

* Use QT 5.9 rather than QT4 (see #33248).

* GCC7 support from upstream (gcc6 patch not needed anymore, build on
  GCC7 works fine), disabled `-Werror=format-security` can be used again
  as compiler flag.

* Patched broken paths in `NifSkope_targets.pri` to point to the proper
  dependencies (otherwise `<gli.hpp>` and `qhull` couldn't be found).

* Patched paths in `NifSkope.pro` to `lupdate` and `lrelease` (default
  `QT_*` paths point to `libsForQt5x.qtbase` which doesn't contain the
  needed binaries, instead they need to point to `libsForQt5x.qttools`).

* Added myself as maintainer.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/tools/graphics/nifskope/default.nix97
-rw-r--r--pkgs/tools/graphics/nifskope/external-lib-paths.patch33
-rw-r--r--pkgs/tools/graphics/nifskope/gcc-6.patch123
-rw-r--r--pkgs/tools/graphics/nifskope/qttools-bins.patch22
-rw-r--r--pkgs/top-level/all-packages.nix2
5 files changed, 110 insertions, 167 deletions
diff --git a/pkgs/tools/graphics/nifskope/default.nix b/pkgs/tools/graphics/nifskope/default.nix
index 19aa7f00f14..c5651d0418e 100644
--- a/pkgs/tools/graphics/nifskope/default.nix
+++ b/pkgs/tools/graphics/nifskope/default.nix
@@ -1,57 +1,68 @@
-{ stdenv, fetchurl, qt4, qmake4Hook }:
+{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "nifskope-1.1.3";
+  name = "nifskope-${version}";
+  version = "2.0.dev7";
 
-  src = fetchurl {
-    url = "https://github.com/niftools/nifskope/releases/download/${name}/${name}.tar.bz2";
-    sha256 = "0fcvrcjyvivww10sjhxamcip797b9ykbf5p3rm2k24xhkwdaqp72";
+  src = fetchFromGitHub {
+    owner = "niftools";
+    repo = "nifskope";
+    rev = "47b788d26ae0fa12e60e8e7a4f0fa945a510c7b2"; # `v${version}` doesn't work with submodules
+    sha256 = "1wqpn53rkq28ws3apqghkzyrib4wis91x171ns64g8kp4q6mfczi";
+    fetchSubmodules = true;
   };
 
-  patches = [ ./gcc-6.patch ];
+  patches = [
+    ./external-lib-paths.patch
+    (substituteAll {
+      src = ./qttools-bins.patch;
+      qttools = "${qttools.dev}/bin";
+    })
+  ];
 
-  buildInputs = [ qt4 ];
+  buildInputs = [ qtbase qttools libGLU.dev makeWrapper ];
+  nativeBuildInputs = [ qmake ];
 
-  nativeBuildInputs = [ qmake4Hook ];
+  preConfigure = ''
+    shopt -s globstar
+    for i in **/*.cpp; do
+      substituteInPlace $i --replace /usr/share/nifskope $out/share/nifskope
+    done
+  '';
 
-  preConfigure =
-    ''
-      for i in *.cpp gl/*.cpp widgets/*.cpp; do
-        substituteInPlace $i --replace /usr/share/nifskope $out/share/nifskope
-      done
-    '';
+  enableParallelBuilding = true;
 
-  qmakeFlags = [ "-after TARGET=nifskope" ];
+  # Inspired by install/linux-install/nifskope.spec.in.
+  installPhase = let
+    qtVersion = "5.${stdenv.lib.versions.minor qtbase.version}";
+  in ''
+    runHook preInstall
 
-  enableParallelBuilding = true;
+    d=$out/share/nifskope
+    mkdir -p $out/bin $out/share/applications $out/share/pixmaps $d/{shaders,lang}
+    cp release/NifSkope $out/bin/
+    cp ./res/nifskope.png $out/share/pixmaps/
+    cp release/{nif.xml,kfm.xml,style.qss} $d/
+    cp res/shaders/*.frag res/shaders/*.prog res/shaders/*.vert $d/shaders/
+    cp ./res/lang/*.ts ./res/lang/*.tm $d/lang/
+    cp ./install/linux-install/nifskope.desktop $out/share/applications
+
+    substituteInPlace $out/share/applications/nifskope.desktop \
+      --replace 'Exec=nifskope' "Exec=$out/bin/NifSkope" \
+      --replace 'Icon=nifskope' "Icon=$out/share/pixmaps/nifskope.png"
+
+    find $out/share -type f -exec chmod -x {} \;
+
+    wrapProgram $out/bin/NifSkope --prefix QT_PLUGIN_PATH : "${qtbase}/lib/qt-${qtVersion}/plugins"
+
+    runHook postInstall
+  '';
 
-  hardeningDisable = [ "format" ];
-
-  # Inspired by linux-install/nifskope.spec.in.
-  installPhase =
-    ''
-      d=$out/share/nifskope
-      mkdir -p $out/bin $out/share/applications $out/share/pixmaps $d/{shaders,doc,lang}
-      cp release/nifskope $out/bin/
-      cp nifskope.png $out/share/pixmaps/
-      cp nif.xml kfm.xml style.qss $d/
-      cp shaders/*.frag shaders/*.prog shaders/*.vert $d/shaders/
-      cp doc/*.html doc/docsys.css doc/favicon.ico $d/doc/
-      cp lang/*.ts lang/*.tm $d/lang/
-
-      substituteInPlace nifskope.desktop \
-        --replace 'Exec=nifskope' "Exec=$out/bin/nifskope" \
-        --replace 'Icon=nifskope' "Icon=$out/share/pixmaps/nifskope.png"
-      cp nifskope.desktop $out/share/applications/
-
-      find $out/share -type f -exec chmod -x {} \;
-    ''; # */
-
-  meta = {
-    homepage = https://github.com/niftools/nifskope/;
+  meta = with stdenv.lib; {
+    homepage = http://niftools.sourceforge.net/wiki/NifSkope;
     description = "A tool for analyzing and editing NetImmerse/Gamebryo '*.nif' files";
-    maintainers = [ stdenv.lib.maintainers.eelco ];
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.bsd3;
+    maintainers = with maintainers; [ eelco ma27 ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
   };
 }
diff --git a/pkgs/tools/graphics/nifskope/external-lib-paths.patch b/pkgs/tools/graphics/nifskope/external-lib-paths.patch
new file mode 100644
index 00000000000..a7f329caf74
--- /dev/null
+++ b/pkgs/tools/graphics/nifskope/external-lib-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/NifSkope.pro b/NifSkope.pro
+index 1c0bc5a..cc29fc5 100644
+--- a/NifSkope.pro
++++ b/NifSkope.pro
+@@ -330,14 +330,14 @@ nvtristrip {
+ }
+ 
+ qhull {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/qhull/src
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/qhull/src
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/qhull/src
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/qhull/src
+     else:INCLUDEPATH += lib/qhull/src
+     HEADERS += $$files($$PWD/lib/qhull/src/libqhull/*.h, false)
+ }
+ 
+ gli {
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/gli/gli -isystem ../nifskope/lib/gli/external
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/gli/gli -isystem ./lib/gli/external
+     else:INCLUDEPATH += lib/gli/gli lib/gli/external
+     HEADERS += $$files($$PWD/lib/gli/gli/*.hpp, true)
+     HEADERS += $$files($$PWD/lib/gli/gli/*.inl, true)
+@@ -346,8 +346,8 @@ gli {
+ }
+ 
+ zlib {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/zlib
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/zlib
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/zlib
+     else:INCLUDEPATH += lib/zlib
+     HEADERS += $$files($$PWD/lib/zlib/*.h, false)
+     SOURCES += $$files($$PWD/lib/zlib/*.c, false)
diff --git a/pkgs/tools/graphics/nifskope/gcc-6.patch b/pkgs/tools/graphics/nifskope/gcc-6.patch
deleted file mode 100644
index 2bb8af9cfe4..00000000000
--- a/pkgs/tools/graphics/nifskope/gcc-6.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-Based on https://github.com/niftools/nifskope/commit/7261b0a119a549b11006d8e41ba990d706171f1c
-
-diff -ru -x '*~' nifskope-1.1.3-orig/gl/dds/ColorBlock.cpp nifskope-1.1.3/gl/dds/ColorBlock.cpp
---- nifskope-1.1.3-orig/gl/dds/ColorBlock.cpp	2012-11-17 23:40:31.000000000 +0100
-+++ nifskope-1.1.3/gl/dds/ColorBlock.cpp	2017-09-10 10:50:36.766909836 +0200
-@@ -78,8 +78,8 @@
- 

- void ColorBlock::init(const Image * img, uint x, uint y)

- {

--	const uint bw = min(img->width() - x, 4U);

--	const uint bh = min(img->height() - y, 4U);

-+	const uint bw = std::min(img->width() - x, 4U);

-+	const uint bh = std::min(img->height() - y, 4U);

- 

- 	static int remainder[] = {

- 		0, 0, 0, 0,

-diff -ru -x '*~' nifskope-1.1.3-orig/gl/dds/Common.h nifskope-1.1.3/gl/dds/Common.h
---- nifskope-1.1.3-orig/gl/dds/Common.h	2012-11-17 23:40:31.000000000 +0100
-+++ nifskope-1.1.3/gl/dds/Common.h	2017-09-10 10:48:08.462099032 +0200
-@@ -33,14 +33,10 @@
- #ifndef _DDS_COMMON_H

- #define _DDS_COMMON_H

- 

--#ifndef min

--#define min(a,b) ((a) <= (b) ? (a) : (b))

--#endif

--#ifndef max

--#define max(a,b) ((a) >= (b) ? (a) : (b))

--#endif

-+#include <algorithm>

-+

- #ifndef clamp

--#define clamp(x,a,b) min(max((x), (a)), (b))

-+#define clamp(x,a,b) std::min( std::max( (x), (a) ), (b) )

- #endif

- 

- template<typename T>

-diff -ru -x '*~' nifskope-1.1.3-orig/gl/dds/DirectDrawSurface.cpp nifskope-1.1.3/gl/dds/DirectDrawSurface.cpp
---- nifskope-1.1.3-orig/gl/dds/DirectDrawSurface.cpp	2012-11-17 23:40:31.000000000 +0100
-+++ nifskope-1.1.3/gl/dds/DirectDrawSurface.cpp	2017-09-10 10:48:45.912056969 +0200
-@@ -63,6 +63,7 @@
- #include "DirectDrawSurface.h"

- #include "BlockDXT.h"

- #include "PixelFormat.h"

-+#include "Common.h"

- 

- #include <stdio.h> // printf

- #include <math.h>  // sqrt

-@@ -685,8 +686,8 @@
- 	// Compute width and height.

- 	for (uint m = 0; m < mipmap; m++)

- 	{

--		w = max(1U, w / 2);

--		h = max(1U, h / 2);

-+		w = std::max(1U, w / 2);

-+		h = std::max(1U, h / 2);

- 	}

- 	

- 	img->allocate(w, h);

-@@ -787,9 +788,9 @@
- 			readBlock(&block);

- 			

- 			// Write color block.

--			for (uint y = 0; y < min(4U, h-4*by); y++)

-+			for (uint y = 0; y < std::min(4U, h-4*by); y++)

- 			{

--				for (uint x = 0; x < min(4U, w-4*bx); x++)

-+				for (uint x = 0; x < std::min(4U, w-4*bx); x++)

- 				{

- 					img->pixel(4*bx+x, 4*by+y) = block.color(x, y);

- 				}

-@@ -909,9 +910,9 @@
- 	

- 	for (uint m = 0; m < mipmap; m++)

- 	{

--		w = max(1U, w / 2);

--		h = max(1U, h / 2);

--		d = max(1U, d / 2);

-+		w = std::max(1U, w / 2);

-+		h = std::max(1U, h / 2);

-+		d = std::max(1U, d / 2);

- 	}

- 

- 	if (header.pf.flags & DDPF_FOURCC)

-diff -ru -x '*~' nifskope-1.1.3-orig/gl/gltexloaders.cpp nifskope-1.1.3/gl/gltexloaders.cpp
---- nifskope-1.1.3-orig/gl/gltexloaders.cpp	2012-11-17 23:40:31.000000000 +0100
-+++ nifskope-1.1.3/gl/gltexloaders.cpp	2017-09-10 10:51:23.586839810 +0200
-@@ -1736,8 +1736,8 @@
- 			

- 			// generate next offset, resize

- 			mipmapOffset += mipmapWidth * mipmapHeight * 4;

--			mipmapWidth = max( 1, mipmapWidth / 2 );

--			mipmapHeight = max( 1, mipmapHeight / 2 );

-+			mipmapWidth = std::max( 1, mipmapWidth / 2 );

-+			mipmapHeight = std::max( 1, mipmapHeight / 2 );

- 		}

- 		

- 		// set total pixel size

-@@ -1932,11 +1932,11 @@
- 			{

- 				if ( ddsHeader.ddsPixelFormat.dwFourCC == FOURCC_DXT1 )

- 				{

--					mipmapOffset += max( 8, ( mipmapWidth * mipmapHeight / 2 ) );

-+					mipmapOffset += std::max( 8, ( mipmapWidth * mipmapHeight / 2 ) );

- 				}

- 				else if ( ddsHeader.ddsPixelFormat.dwFourCC == FOURCC_DXT5 )

- 				{

--					mipmapOffset += max( 16, ( mipmapWidth * mipmapHeight ) );

-+					mipmapOffset += std::max( 16, ( mipmapWidth * mipmapHeight ) );

- 				}

- 			}

- 			else if ( ddsHeader.ddsPixelFormat.dwBPP == 24 )

-@@ -1947,8 +1947,8 @@
- 			{

- 				mipmapOffset += ( mipmapWidth * mipmapHeight * 4 );

- 			}

--			mipmapWidth = max( 1, mipmapWidth / 2 );

--			mipmapHeight = max( 1, mipmapHeight / 2 );

-+			mipmapWidth = std::max( 1, mipmapWidth / 2 );

-+			mipmapHeight = std::max( 1, mipmapHeight / 2 );

- 		}

- 		

- 		nif->set<quint32>( iData, "Num Pixels", mipmapOffset );

diff --git a/pkgs/tools/graphics/nifskope/qttools-bins.patch b/pkgs/tools/graphics/nifskope/qttools-bins.patch
new file mode 100644
index 00000000000..5d85f9ef4fd
--- /dev/null
+++ b/pkgs/tools/graphics/nifskope/qttools-bins.patch
@@ -0,0 +1,22 @@
+diff --git a/NifSkope_targets.pri b/NifSkope_targets.pri
+index 05324c2..d8389b1 100644
+--- a/NifSkope_targets.pri
++++ b/NifSkope_targets.pri
+@@ -11,7 +11,7 @@ else:EXE = ""
+ ## lupdate / lrelease
+ ###############################
+ 
+-QMAKE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate$${EXE}
++QMAKE_LUPDATE = @qttools@/lupdate$${EXE}
+ exists($$QMAKE_LUPDATE) {
+ 	# Make target for Updating .ts
+ 	updatets.target = updatets
+@@ -23,7 +23,7 @@ exists($$QMAKE_LUPDATE) {
+ 	message("lupdate could not be found, ignoring make target")
+ }
+ 
+-QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease$${EXE}
++QMAKE_LRELEASE = @qttools@/lrelease$${EXE}
+ exists($$QMAKE_LRELEASE) {
+ 	# Build Step for Releasing .ts->.qm
+ 	updateqm.input = TRANSLATIONS
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 45e62452181..e1aaa6364cf 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -4066,7 +4066,7 @@ with pkgs;
 
   niff = callPackage ../tools/package-management/niff { };
 
-  nifskope = callPackage ../tools/graphics/nifskope { };
+  nifskope = libsForQt59.callPackage ../tools/graphics/nifskope { };
 
   nilfs-utils = callPackage ../tools/filesystems/nilfs-utils {};