From 1817b508705e43c4d7bc55eaaeead838ac9a2d79 Mon Sep 17 00:00:00 2001 From: Nicolas Benes Date: Wed, 7 Aug 2024 22:43:54 +0200 Subject: [PATCH] fastddsgen: add missing C preprocessor dependency to wrapper fastddsgen internally calls 'cpp' (the C preprocessor) to resolve include directives, include guards, etc. See https://github.com/eProsima/Fast-DDS-Gen/blob/541129f6e7365b6b789fd2d41fa6efd94503a6b4/src/main/java/com/eprosima/fastdds/fastddsgen.java#L1423 Make 'cpp' available from the fastddsgen wrapper script. Use the unwrapped 'cpp', because the wrapped one passes additional parameters, which make the produced output incompatible with fastddsgen (string out of bounds exception). Fixes the error when using IDL files with includes: ``` Processing the file build/foo.idl... ERROR: Cannot generate the files begin -3, end 1, length 1 java.lang.StringIndexOutOfBoundsException: begin -3, end 1, length 1 at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4602) at java.base/java.lang.String.substring(String.java:2705) at com.eprosima.idl.context.Context.processPreprocessorLine(Context.java:955) at com.eprosima.idl.parser.grammar.IDLLexer.PREPROC_DIRECTIVE_action(IDLLexer.java:223) at com.eprosima.idl.parser.grammar.IDLLexer.action(IDLLexer.java:215) at org.antlr.v4.runtime.atn.LexerCustomAction.execute(LexerCustomAction.java:97) at org.antlr.v4.runtime.atn.LexerActionExecutor.execute(LexerActionExecutor.java:168) at org.antlr.v4.runtime.atn.LexerATNSimulator.accept(LexerATNSimulator.java:366) at org.antlr.v4.runtime.atn.LexerATNSimulator.failOrAccept(LexerATNSimulator.java:299) at org.antlr.v4.runtime.atn.LexerATNSimulator.execATN(LexerATNSimulator.java:230) at org.antlr.v4.runtime.atn.LexerATNSimulator.match(LexerATNSimulator.java:114) at org.antlr.v4.runtime.Lexer.nextToken(Lexer.java:141) at org.antlr.v4.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:169) at org.antlr.v4.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:152) at org.antlr.v4.runtime.BufferedTokenStream.setup(BufferedTokenStream.java:254) at org.antlr.v4.runtime.BufferedTokenStream.lazyInit(BufferedTokenStream.java:249) at org.antlr.v4.runtime.CommonTokenStream.LT(CommonTokenStream.java:92) at org.antlr.v4.runtime.Parser.enterRule(Parser.java:628) at com.eprosima.idl.parser.grammar.IDLParser.specification(IDLParser.java:304) at com.eprosima.fastdds.fastddsgen.parseIDL(fastddsgen.java:809) at com.eprosima.fastdds.fastddsgen.process(fastddsgen.java:640) at com.eprosima.fastdds.fastddsgen.execute(fastddsgen.java:458) at com.eprosima.fastdds.fastddsgen.main(fastddsgen.java:1581) ``` --- pkgs/development/tools/fastddsgen/default.nix | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/pkgs/development/tools/fastddsgen/default.nix b/pkgs/development/tools/fastddsgen/default.nix index 1a38ca3050ce..8d1110334f45 100644 --- a/pkgs/development/tools/fastddsgen/default.nix +++ b/pkgs/development/tools/fastddsgen/default.nix @@ -1,4 +1,11 @@ -{ lib, stdenv, runtimeShell, fetchFromGitHub, gradle_7, openjdk17 }: +{ lib +, stdenv +, makeWrapper +, fetchFromGitHub +, gradle_7 +, openjdk17 +}: + let pname = "fastddsgen"; version = "3.3.0"; @@ -17,7 +24,11 @@ stdenv.mkDerivation { hash = "sha256-oqbSIzsYUwD8bTqGKZ9he9d18EDq9mHZFoNUp0RK0qU="; }; - nativeBuildInputs = [ gradle openjdk17 ]; + nativeBuildInputs = [ + gradle + openjdk17 + makeWrapper + ]; mitmCache = gradle.fetchDeps { inherit pname; @@ -33,12 +44,12 @@ stdenv.mkDerivation { gradle install --install_path=$out - # Override the default start script to use absolute java path - cat <$out/bin/fastddsgen - #!${runtimeShell} - exec ${openjdk17}/bin/java -jar "$out/share/fastddsgen/java/fastddsgen.jar" "\$@" - EOF - chmod a+x "$out/bin/fastddsgen" + # Override the default start script to use absolute java path. + # Make the unwrapped "cpp" available in the path, since the wrapped "cpp" + # passes additional flags and produces output incompatible with fastddsgen. + makeWrapper ${openjdk17}/bin/java $out/bin/fastddsgen \ + --add-flags "-jar $out/share/fastddsgen/java/fastddsgen.jar" \ + --prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc ]} runHook postInstall '';