/** * Determines the version of LilyPond in use and writes the version * string to self::$lilypondVersion. * * @throws ScoreException if LilyPond could not be executed properly. */ private static function getLilypondVersion() { global $wgScoreLilyPond; $prof = new ScopedProfiling( __METHOD__ ); if ( !is_executable( $wgScoreLilyPond ) ) { throw new ScoreException( wfMessage( 'score-notexecutable', $wgScoreLilyPond ) ); } $cmd = wfEscapeShellArg( $wgScoreLilyPond ) . ' --version 2>&1'; $output = wfShellExec( $cmd, $rc ); if ( $rc != 0 ) { self::throwCallException( wfMessage( 'score-versionerr' ), $output ); } $n = sscanf( $output, 'GNU LilyPond %s', self::$lilypondVersion ); if ( $n != 1 ) { self::$lilypondVersion = null; self::throwCallException( wfMessage( 'score-versionerr' ), $output ); } }