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

MinGW/cygwin paths are passed to cl.exe as option #13

Open
GitMensch opened this issue Oct 10, 2021 · 1 comment · May be fixed by #11
Open

MinGW/cygwin paths are passed to cl.exe as option #13

GitMensch opened this issue Oct 10, 2021 · 1 comment · May be fixed by #11

Comments

@GitMensch
Copy link
Contributor

cl exe as GCC allows to specify a file as input, but cccl test.c /path/to/lib is translated to cl test.c -path/to/lib which then results in warning D9002 of cl "unknown option ignored", followed by a linker error because of the missing symbols.

GitMensch added a commit to GitMensch/cccl that referenced this issue Oct 10, 2021
additional: fix Copyright date, increment version number
@GitMensch GitMensch linked a pull request Oct 10, 2021 that will close this issue
@wsfulton
Copy link
Member

wsfulton commented Jan 2, 2022

The proposed fix in #10 uses test -e to see if the 'option' is a path or a file and then handle appropriately. This may not work if the file does not exist and a file/path was actually intended. I've got grave doubts about trying to generically interpret forward slash options to try and do the right thing. It's a can of worms I don't want to open up. The Unix-like operating systems already have ways to deal with paths and it's best for users to utilise that support, for example, the cygpath tool, mixed paths (such as c:/folder/file) or MSYS's automated Posix path conversions.

Instead, I propose removing the code that slightly modifies an option beginning '/'. Currently these are replaced by the system specific separator (/ on cygwin and - on MSYS based systems). I propose all options beginning / are completely unmodified.

cccl's goal is to be simple and lightweight and the proposal fits in with that. There is effectively no change on cygwin based systems. However, not on MSYS based systems.

On MSYS based systems, the upside is:

  • Full support is gained for using absolute (full) posix paths, for example cccl /c/code/main.cpp will now correctly be passed on as cl /c/code/main.cpp. Note that MSYS converts/corrects the /c/code/main.cpp to c:\code\main.cpp before passing to the cl executable.
  • Fit in and work with MSYS and its path handling as well as its forward slash option handling.

On MSYS based systems, the downside is:

  • Change in behaviour when passing / to cccl. Currently options starting with / get converted to the option starting with -. cccl is a Unix cc emulator and so this is not likely to be something that is used much and / options are fraught with problems on MSYS based systems, presumably largely avoided. They largely work when using // instead as MSYS will translate this back to just /. These cccl / options were always intended to be passed through to cl unmodified and on MSYS // is what is expected to be used instead. In summary, anyone currently passing options beginning / to cccl will have to change them to begin with - or //.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants