bash configure - LINK : fatal error LNK1104: cannot open file ...fixpath.exe
jbvernee
jbvernee at xs4all.nl
Mon Jun 11 21:26:32 UTC 2018
Hello,
I have tried the MSYS2_ARG_CONV_EXCL environment variable, thanks for
the suggestion. It's supposed to be a semi-colon separated list of
argument prefixes (they have some examples like
`/switch;/sdcard;--root=`), so I tried setting it to `/out:`, `-Fe`
(from the .m4 file) and `/out`, and also just the entire path that is
being mangled. But none of them worked :( (still the same error).
I'm trying to build the amber repo, which I think is parallel with
jdk/jdk tip? Any ways, there is no autogen.sh in /make/autoconf and
anytime I make changes to the .m4 file it mentions something about
having to regenerate the configure file. I can also see the changes I
make in `/build/.configure-support/generated-configure.sh`, which
currently looks like this (the part I mentioned):
```
#$RM -rf $FIXPATH_BIN $FIXPATH_DIR
#$MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
cd $CURDIR
echo "#####################" here
#if test ! -x $FIXPATH_BIN; then
# cd $FIXPATH_DIR
# $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log
2>&1
# cd $CURDIR
#fi
echo "#####################" there
if test ! -x $FIXPATH_BIN; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
cat $FIXPATH_DIR/fixpath1.log
as_fn_error $? "Could not create $FIXPATH_BIN" "$LINENO" 5
fi
```
Which gives me this output (the last few lines):
```
checking if fixpath can be created...
##################### here
##################### there
no
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
configure: error: Could not create
/J/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/cofixpath.cupport/bin/fixpath.exe
J:/Projects/openjdk/amber/make/src/native/fixpath.c(49): warning C4477:
'fprintf' : format string '%s' requires an argument of type 'char *',
but variadic argument 3 has type 'LPVOID'
Microsoft (R) Incremental Linker Version 14.00.24215.1
Copyright (C) Microsoft Corporation. All rights reserved.
/out:J:J:/msys64/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/configure-support/bin/fixpath.exe
fixpath.obj
LINK : fatal error LNK1104: cannot open file
'J:J:/msys64/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/configure-support/bin/fixpath.exe'
configure exiting with result code 1
```
So the changes I'm making seem to be going through... well... at least
as far as the echo statements go. I also tried using -e on the check
that is not comment out, but with no different results (I'm also using
autoconf 2.69 btw). This is kind of a head scratcher éh. I'm calling it
a night, I think I'll also try taking this up with the msys guys, some
other time.
Thanks for the help so far,
Jorn Vernee
Erik Joelsson schreef op 2018-06-11 22:19:
> Hello,
>
> On 2018-06-11 13:00, jbvernee wrote:
>> Hello Erik,
>>
>> Thank you for the suggestion. Unfortunately it didn't help. TBH, I've
>> been banging my head against trying to build the JDK on my machine on
>> and off for a few months. So at this point I really appreciate any
>> help that gets me even an inch further, thanks.
>>
>> After your suggestion, I have tracked down the call site of the
>> compile command and checked the paths that are being used in
>> basics_windows.m4 (line 406) to compile fixpath.exe:
>>
>> ```
>> cd $FIXPATH_DIR
>> $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log
>> 2>&1
>> cd $CURDIR
>> ```
>> They are:
>> $CC = /j/progra~2/micros~2.0/vc/bin/amd64/cl
>> $FIXPATH_BIN_W =
>> J:/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/configure-support/bin/fixpath.exe
>> $FIXPATH_DIR =
>> /J/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/configure-support/fixpath
>>
>> Note that the second one is a windows style path. I can change that to
>> use the unix style path, and that does affect the error message, I now
>> see:
>> `'/J/Projects/openjdk/amber/make/autoconf/build/windows-x86_64-normal-server-release/configure-support/bin/fixpath.exe'`
>> as the path in the linker error. But of course the Visual Studios
>> linker can't do anything with a unix style path.
>>
>> What's weird is that either path is working for the C compiler (cl),
>> but it is being mangled before being passed to the linker, and I can't
>> find where the linker command is actually being fired off. It seems to
>> be done by that same line. I was hoping you could tell me more about
>> that?
>>
> AFAIK, we compile fixpath from a single source file directly into an
> executable, so it's cl that calls link. Somewhere along the way, msys
> decides to mangle your path argument incorrectly. You could try using
> MSYS2_ARG_CONV_EXCL to disable the mangling. I don't remember exactly
> how it works but I know you can affect the mangling using this env
> variable.
>> One other idea I had, but haven't been able to implement, is to check
>> whether the fixpath tool exists before trying to compile it. That way
>> I could just compile it manually. I have tried this snippet in
>> basics_windows.m4 at line 404:
>> ```
>> #$RM -rf $FIXPATH_BIN $FIXPATH_DIR
>> #$MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
>> cd $CURDIR
>> if test ! -x $FIXPATH_BIN; then
>> cd $FIXPATH_DIR
>> $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log
>> 2>&1
>> cd $CURDIR
>> fi
>> ```
>>
>> i.e. check if fixpath.exe exists, otherwise compile it (I don't know
>> the source language though, so I just copied that from somewhere
>> else). That didn't work, the check seems to be failing and it's still
>> trying to compile (and I don't know why, I hope it's not a tabs vs.
>> spaces issue?). I also tried just commenting that part out completely,
>> but it's STILL trying to compile. I have no idea why that is happening
>> a this point. It's also immediately spitting out 'no' after printing
>> 'checking if fixpath can be created...', even before all the output
>> from the compiler, so it almost seems like the command is being fired
>> off from somewhere else? Or maybe it's just a race condition, idk.
>>
> What version of OpenJDK are you trying to build? As in which
> repository did you clone. Depending on which, you may need to
> explicitly regenerate the configure script after making changes to .m4
> files. There is a script, autogen.sh, in the same directory as the .m4
> files to do it correctly. This requires autoconf 2.69 to be available.
>
> The language in .m4 is autoconf, which (in our case) is bash shell
> with m4 macros on top. Most of the source, including your snippet
> above is just bash. So your change above looks correct, you just need
> to get it to be used. You could try changing the -x to -e in case
> execute permissions aren't translated properly between msys and
> windows.
>
> /Erik
>> If you have any more suggestions I really appreciate it, but if it's
>> too much trouble for an unsupported build system I understand.
>>
>> Best regards,
>> Jorn Vernee
>>
More information about the build-dev
mailing list