diff --git a/pkgs/development/libraries/science/networking/ns3/default.nix b/pkgs/development/libraries/science/networking/ns3/default.nix new file mode 100644 index 00000000000..9fc72f18e5d --- /dev/null +++ b/pkgs/development/libraries/science/networking/ns3/default.nix @@ -0,0 +1,98 @@ +{ stdenv +, fetchFromGitHub, fetchurl +, python + +# for binding generation +, castxml ? null + +# can take a long time, generates > 30000 images/graphs +, enableDoxygen ? false + +# e.g. "optimized" or "debug". If not set, use default one +, build_profile ? null + +# --enable-examples +, withExamples ? false + +# very long +, withManual ? false, doxygen ? null, graphviz ? null, imagemagick ? null +# for manual, tetex is used to get the eps2pdf binary +# texlive to get latexmk. building manual still fails though +, dia, tetex ? null, ghostscript ? null, texlive ? null + +# generates python bindings +, generateBindings ? false, ncurses ? null + +# All modules can be enabled by choosing 'all_modules'. +# we include here the DCE mandatory ones +, modules ? [ "core" "network" "internet" "point-to-point" "fd-net-device" "netanim"] +, gcc6 +, lib +}: + +let + pythonEnv = python.withPackages(ps: + stdenv.lib.optional withManual ps.sphinx + ++ stdenv.lib.optionals generateBindings (with ps;[ pybindgen pygccxml ]) + ); +in +stdenv.mkDerivation rec { + + name = "ns-3.${version}"; + version = "28"; + + # the all in one https://www.nsnam.org/release/ns-allinone-3.27.tar.bz2; + # fetches everything (netanim, etc), this package focuses on ns3-core + src = fetchFromGitHub { + owner = "nsnam"; + repo = "ns-3-dev-git"; + rev = name; + sha256 = "17kzfjpgw2mvyx1c9bxccnvw67jpk09fxmcnlkqx9xisk10qnhng"; + }; + + # ncurses is a hidden dependency of waf when checking python + buildInputs = lib.optionals generateBindings [ castxml ncurses ] + ++ stdenv.lib.optional enableDoxygen [ doxygen graphviz imagemagick ] + ++ stdenv.lib.optional withManual [ dia tetex ghostscript texlive.combined.scheme-medium ]; + + propagatedBuildInputs = [ gcc6 pythonEnv ]; + + postPatch = '' + patchShebangs ./waf + patchShebangs doc/ns3_html_theme/get_version.sh + ''; + + configureScript = "${python.interpreter} ./waf configure"; + + configureFlags = with stdenv.lib; [ + "--enable-modules=${stdenv.lib.concatStringsSep "," modules}" + "--with-python=${pythonEnv.interpreter}" + ] + ++ optional (build_profile != null) "--build-profile=${build_profile}" + ++ optional generateBindings [ ] + ++ optional withExamples " --enable-examples " + ++ optional doCheck " --enable-tests " + ; + + postBuild = with stdenv.lib; let flags = concatStringsSep ";" ( + optional enableDoxygen "./waf doxygen" + ++ optional withManual "./waf sphinx" + ); + in "${flags}" + ; + + doCheck = true; + + # we need to specify the proper interpreter else ns3 can check against a + # different version even though we + checkPhase = '' + ${pythonEnv.interpreter} ./test.py + ''; + + meta = { + homepage = http://www.nsnam.org; + license = stdenv.lib.licenses.gpl3; + description = "A discrete time event network simulator"; + platforms = with stdenv.lib.platforms; unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fb07c9b5ea3..9f6e0755f54 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20204,6 +20204,8 @@ with pkgs; megam = callPackage ../applications/science/misc/megam { }; + ns-3 = callPackage ../development/libraries/science/networking/ns3 { }; + root = callPackage ../applications/science/misc/root { inherit (darwin.apple_sdk.frameworks) Cocoa OpenGL; };