Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass locations of external dependencies through arguments #121

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

jstma
Copy link

@jstma jstma commented Dec 8, 2023

  • use ly2video.cfg to bring in windows paths for lilypond, ffmpeg, and timidity. Could probably be used on other OSs too.

  • ly2video.cfg works on Windows in Wine, not tested on other OSs.

  • works properly on linux if ly2video.cfg is not defined

@jstma
Copy link
Author

jstma commented Dec 8, 2023

Addresses issue #120

ly2video/cli.py Outdated
@@ -920,6 +921,11 @@ def parseOptions():

group_os = parser.add_argument_group(title='External programs')

group_os.add_argument(
"--windows-lilypond", dest="winLilypond",
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this have to be Windows-specific? Why not just allow optionally specifying an arbitrary path for where to find lilypond, e.g. --lilypond="C:\\lilypond\\bin\\lilypond"? This would allow greater flexibility on other operating systems too.

ffmpeg = options.winFfmpeg + "ffmpeg"
if os.system(ffmpeg + " -version" + redirectToNull) != 0:
fatal("FFmpeg was not found (maybe use --windows-ffmpeg?).", 2)
stdout = safeRun(["ffmpeg", "-version", redirectToNull],
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here, why not just have --ffmpeg and --timidity options which allow pointing to those executables in any location on any OS?

ly2video/cli.py Outdated
Comment on lines 971 to 979
if not options.winLilypond:
if 'lilypond-windows' in section:
options.winLilypond = section['lilypond-windows']
if not options.winFfmpeg:
if 'ffmpeg-windows' in section:
options.winFfmpeg = section['ffmpeg-windows']
if not options.winTimidity:
if 'timidity-windows' in section:
options.winTimidity = section['timidity-windows']
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here, I think there's probably no reason to limit this to Windows. Also if an option is already set on the CLI, it shouldn't be overridden by ly2video.cfg; the CLI option should take precedence as this is conventional behaviour.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here, I think there's probably no reason to limit this to Windows.

Agreed, I was just following what was originally there. I'll get rid of all the win references.

Also if an option is already set on the CLI, it shouldn't be overridden by ly2video.cfg; the CLI option should take precedence as this is conventional behaviour.

I agree, and said in those comments, it was for testing and to start the conversation about ConfigArgParse. It's an external module that does file and argument parsing.

Otherwise I need to think of a clean way to parse the file first and conditionally apply to options. That's going to be some ugly code.

If this were c I would do it like this:

struct { } options;

parse_file(&options);
parse_args(&options);

This way the CLI arguments will overwrite the file arguments. I don't know the 'python' way to do this using configparser and argparse. Suggestions welcome.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I only just noticed that you already do the check whether the option is set, so that already prevents it being overridden 👍

That said, you could shorten it by skipping both if conditionals, e.g.

        options.ffmpeg = options.ffmpeg or section.get('ffmpeg')

Unfortunately Python doesn't have an equivalent of the ||= operator, otherwise it could have been shortened to

        options.ffmpeg ||= section.get('ffmpeg')

 * pass locations of external dependencies through arguments

 * use ly2video.cfg to bring in windows paths for lilypond,
   ffmpeg, and timidity.  Could probably be used on other
   OSs too.

 * ly2video.cfg works on Windows in Wine, not tested on other OSs.

 * works properly on linux if ly2video.cfg is not defined

 * don't run convert.ly on windows.  The process fails for an
   unknown reason.

 * tmpPath does not store the path from the last time ly2video was
   run.  Since the temporary directory name is random, there's no
   point in deleting 'old temporary files'.

 * tmpPath was using RUNDIR for some strange reason.  Though at
   execution time, it's "" which leaves just the temporary
   directory and the desired subdirectory name to join.

 * detect exception and print a message to the user.
   Not sure if this is only a wine problem.  Will need someone
   to test on Windows.

 * Added some details regarding convert-ly.py on Windows
@jstma jstma marked this pull request as ready for review December 15, 2023 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants