diff --git a/pkgs/development/libraries/gobject-introspection/absolute-python-shebang.patch b/pkgs/development/libraries/gobject-introspection/absolute-python-shebang.patch new file mode 100644 index 0000000000000..7671347acddab --- /dev/null +++ b/pkgs/development/libraries/gobject-introspection/absolute-python-shebang.patch @@ -0,0 +1,17 @@ +diff --git a/py-tools/meson.build b/py-tools/meson.build +index 2fff98d5..7784fffc 100644 +--- a/py-tools/meson.build ++++ b/py-tools/meson.build +@@ -9,11 +9,7 @@ if with_doctool + tools += [['g-ir-doc-tool', 'docmain', 'doc_main']] + endif + +-if cc.get_id() == 'msvc' +- python_cmd = '/usr/bin/env ' + python.path() +-else +- python_cmd = '/usr/bin/env python@0@'.format(python.language_version().split('.')[0]) +-endif ++python_cmd = @python_bin@ + + tool_output = [] + foreach tool : tools diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix index 03b0d1767d9fe..44df7db5bd591 100644 --- a/pkgs/development/libraries/gobject-introspection/default.nix +++ b/pkgs/development/libraries/gobject-introspection/default.nix @@ -1,8 +1,11 @@ { stdenv +, buildPackages , fetchurl +, fetchFromGitLab , glib , flex , bison +, makeSetupHook , meson , ninja , gtk-doc @@ -16,26 +19,52 @@ , cairo , gnome3 , substituteAll +, writeText , nixStoreDir ? builtins.storeDir -, x11Support ? true +, x11Support ? stdenv.buildPlatform == stdenv.hostPlatform +, build_library_and_c_tools ? true +, build_python_tools ? true +, gi_cross_use_prebuilt_gi ? false +, build_introspection_data ? + build_library_and_c_tools && + (build_python_tools || gi_cross_use_prebuilt_gi) +, gobject-introspection-py-tools ? null }: # now that gobject-introspection creates large .gir files (eg gtk3 case) # it may be worth thinking about using multiple derivation outputs # In that case its about 6MB which could be separated +assert build_library_and_c_tools || build_python_tools; +assert build_introspection_data -> build_library_and_c_tools; +assert gi_cross_use_prebuilt_gi -> gobject-introspection-py-tools != null; + +let + giSetupHook = makeSetupHook { + name = "gobject-introspection-hook"; + } ./setup-hook.sh; + mkFlag = name: cond: "-D${name}=${if cond then "true" else "false"}"; +in + stdenv.mkDerivation rec { pname = "gobject-introspection"; - version = "1.64.1"; + version = "1.65-pre${stdenv.lib.strings.substring 0 7 src.rev}"; # outputs TODO: share/gobject-introspection-1.0/tests is needed during build # by pygobject3 (and maybe others), but it's only searched in $out - outputs = [ "out" "dev" "devdoc" "man" ]; - outputBin = "dev"; - - src = fetchurl { - url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; - sha256 = "19vz7vp10h0zj3f491yk72dp89bix6rgkzxg4qcm4d6151ksxgl0"; + outputs = [ "out" ] + ++ stdenv.lib.optionals build_library_and_c_tools [ "dev" "bin" ] + ++ [ "devdoc" "man" ]; + + # Do not propogate the "bin" output, as it refers to the dev output. + propagatedBuildOutputs = stdenv.lib.optional build_library_and_c_tools "out"; + + src = fetchFromGitLab { + domain = "gitlab.gnome.org"; + owner = "Ericson2314"; + repo = "gobject-introspection"; + rev = "d7a4fcb82957271f98b4492494a71cfaa8699c03"; + sha256 = "0qnbld1k08c91zgvlasg38d7kidl7rr0drzd4dnyslj0vhssd5qz"; }; patches = [ @@ -45,6 +74,13 @@ stdenv.mkDerivation rec { (substituteAll { src = ./absolute_shlib_path.patch; inherit nixStoreDir; + }) + # We use this during the build, so patch shebangs in the fixed phase is too + # later. This is a template for string substitution so patch shebangs of + # the source is also too early. + (substituteAll { + src = ./absolute-python-shebang.patch; + python_bin = stdenv.lib.escapeShellArg python3.interpreter; }) ] ++ stdenv.lib.optionals x11Support [ # Hardcode the cairo shared library path in the Cairo gir shipped with this package. @@ -66,11 +102,14 @@ stdenv.mkDerivation rec { docbook_xml_dtd_43 # FIXME: remove in next release docbook_xml_dtd_45 python3 - setupHook # move .gir files + ] ++ stdenv.lib.optionals (build_introspection_data && !gi_cross_use_prebuilt_gi) [ + giSetupHook # move .gir files ]; buildInputs = [ python3 + ] ++ stdenv.lib.optionals gi_cross_use_prebuilt_gi [ + gobject-introspection-py-tools ]; checkInputs = stdenv.lib.optionals stdenv.isDarwin [ @@ -82,12 +121,24 @@ stdenv.mkDerivation rec { glib ]; + strictDeps = true; + mesonFlags = [ - "--datadir=${placeholder "dev"}/share" "-Ddoctool=disabled" "-Dcairo=disabled" "-Dgtk_doc=true" - ]; + (mkFlag "build_library_and_c_tools" build_library_and_c_tools) + (mkFlag "build_python_tools" build_python_tools) + (mkFlag "gi_cross_use_prebuilt_gi" gi_cross_use_prebuilt_gi) + (mkFlag "build_introspection_data" build_introspection_data) + ] ++ stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ + ("--cross-file=" + writeText "cross-file.conf" ('' + [binaries] + exe_wrapper = ${stdenv.lib.escapeShellArg (stdenv.hostPlatform.emulator buildPackages)} + '')) + "-Dgi_cross_ldd_wrapper=${buildPackages.prelink}/bin/prelink-rtld" + "-Dgi_cross_binary_wrapper=${stdenv.hostPlatform.emulator buildPackages}" + ] ++ stdenv.lib.optional build_library_and_c_tools "--datadir=${placeholder "dev"}/share"; doCheck = !stdenv.isAarch64; @@ -104,7 +155,12 @@ stdenv.mkDerivation rec { rm $out/lib/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary} ''; - setupHook = ./setup-hook.sh; + # Remove the bindir from the pkg-config file. We will add it back in a wrapper. + postInstall = stdenv.lib.optionalString build_library_and_c_tools '' + sed -i '/bindir/d' "$out/lib/pkgconfig"/*.pc + ''; + + setupHook = if build_python_tools then giSetupHook else null; passthru = { updateScript = gnome3.updateScript { diff --git a/pkgs/development/libraries/gobject-introspection/setup-hook.sh b/pkgs/development/libraries/gobject-introspection/setup-hook.sh index 6bee47aeb096d..50571a8f914d1 100644 --- a/pkgs/development/libraries/gobject-introspection/setup-hook.sh +++ b/pkgs/development/libraries/gobject-introspection/setup-hook.sh @@ -10,7 +10,7 @@ make_gobject_introspection_find_gir_files() { fi } -addEnvHooks "$hostOffset" make_gobject_introspection_find_gir_files +addEnvHooks "$targetOffset" make_gobject_introspection_find_gir_files giDiscoverSelf() { if [ -d "$prefix/lib/girepository-1.0" ]; then diff --git a/pkgs/development/tools/misc/prelink/default.nix b/pkgs/development/tools/misc/prelink/default.nix index 5d7ca75de3222..c6c636cfba787 100644 --- a/pkgs/development/tools/misc/prelink/default.nix +++ b/pkgs/development/tools/misc/prelink/default.nix @@ -1,23 +1,37 @@ -{ stdenv, fetchurl, libelf }: +{ stdenv, fetchgit, autoreconfHook +, libelf, libiberty +}: -let - version = "20130503"; -in -stdenv.mkDerivation { +stdenv.mkDerivation rec { pname = "prelink"; - inherit version; + version = "2019-6-24-" + stdenv.lib.substring 0 7 src.rev; + + src = fetchgit { + url = "https://git.yoctoproject.org/git/prelink-cross"; + branchName = "cross_prelink"; + rev = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37"; + sha256 = "15x1p6x9wndbjqaajhmg5nd4rcg805blixwm0l0jaiqbi9kfiprv"; + }; + + nativeBuildInputs = [ + autoreconfHook + ]; buildInputs = [ - libelf stdenv.cc.libc (stdenv.lib.getOutput "static" stdenv.cc.libc) + stdenv.cc.libc (stdenv.lib.getOutput "static" stdenv.cc.libc) + libelf libiberty ]; - src = fetchurl { - url = "https://people.redhat.com/jakub/prelink/prelink-${version}.tar.bz2"; - sha256 = "1w20f6ilqrz8ca51qhrn1n13h7q1r34k09g33d6l2vwvbrhcffb3"; - }; + # There are some failures to investigate + doCheck = false; + + preCheck = '' + patchShebangs --build testsuite + ''; meta = { - homepage = "https://people.redhat.com/jakub/prelink/"; + homepage = "https://wiki.yoctoproject.org/wiki/Cross-Prelink"; + #homepage = "https://people.redhat.com/jakub/prelink/"; license = "GPL"; description = "ELF prelinking utility to speed up dynamic linking"; platforms = stdenv.lib.platforms.linux; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4fe90fc8091cb..9379a51a5b959 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12047,11 +12047,22 @@ in gns3-gui = gns3Packages.guiStable; gns3-server = gns3Packages.serverStable; - gobject-introspection = callPackage ../development/libraries/gobject-introspection { + gobject-introspection-full-classic = callPackage ../development/libraries/gobject-introspection { nixStoreDir = config.nix.storeDir or builtins.storeDir; inherit (darwin) cctools; }; + gobject-introspection-py-tools = gobject-introspection-full-classic.override { + build_python_tools = true; + build_library_and_c_tools = false; + }; + + gobject-introspection = gobject-introspection-full-classic.override { + build_python_tools = false; + build_library_and_c_tools = true; + gi_cross_use_prebuilt_gi = true; + }; + goocanvas = callPackage ../development/libraries/goocanvas { }; goocanvas2 = callPackage ../development/libraries/goocanvas/2.x.nix { }; goocanvasmm2 = callPackage ../development/libraries/goocanvasmm { };