openssl: nmake install stuck in first step in windows

Greetings. I tried to compile openssl 3.0.0-alpha.15 in Windows, nmake compiled everything fine, but nmake install stucked at the first step, which is nmake depend, which is running a perl command: "perl.exe" ".\util\add-depends.pl" "VC". I should also note alpha.14 was fine. config data:

$ perl configdata.pm --dump
Command line (with current working directory = .):

    D:\linux\perl\bin\perl.exe Configure VC-WIN64A no-asm --prefix=d:\linux\openssl3 --openssldir=d:\linux\openssl3\conf

Perl information:

    D:\linux\perl\bin\perl.exe
    5.24.3 for MSWin32-x64-multi-thread

Enabled features:

    acvp_tests
    aria
    async
    autoalginit
    autoerrinit
    autoload-config
    bf
    blake2
    bulk
    cached-fetch
    camellia
    capieng
    cast
    chacha
    cmac
    cmp
    cms
    comp
    ct
    deprecated
    des
    dgram
    dh
    dsa
    dso
    dtls
    dynamic-engine
    ec
    ec2m
    ecdh
    ecdsa
    engine
    err
    filenames
    fips
    fips-securitychecks
    gost
    idea
    legacy
    makedepend
    md4
    mdc2
    module
    multiblock
    nextprotoneg
    pinshared
    ocb
    ocsp
    padlockeng
    pic
    poly1305
    posix-io
    psk
    rc2
    rc4
    rdrand
    rfc3779
    rmd160
    scrypt
    secure-memory
    seed
    shared
    siphash
    siv
    sm2
    sm3
    sm4
    sock
    srp
    srtp
    sse2
    ssl
    static-engine
    stdio
    tests
    threads
    tls
    ts
    ui-console
    uplink
    whirlpool
    tls1
    tls1-method
    tls1_1
    tls1_1-method
    tls1_2
    tls1_2-method
    tls1_3
    dtls1
    dtls1-method
    dtls1_2
    dtls1_2-method

Disabled features:

    afalgeng            [not-linux] OPENSSL_NO_AFALGENG
    asan                [default]   OPENSSL_NO_ASAN
    asm                 [option]    OPENSSL_NO_ASM
    buildtest-c++       [default]   
    crypto-mdebug       [default]   OPENSSL_NO_CRYPTO_MDEBUG
    devcryptoeng        [default]   OPENSSL_NO_DEVCRYPTOENG
    ec_nistp_64_gcc_128 [default]   OPENSSL_NO_EC_NISTP_64_GCC_128
    egd                 [default]   OPENSSL_NO_EGD
    external-tests      [default]   OPENSSL_NO_EXTERNAL_TESTS
    fuzz-libfuzzer      [default]   OPENSSL_NO_FUZZ_LIBFUZZER
    fuzz-afl            [default]   OPENSSL_NO_FUZZ_AFL
    ktls                [default]   OPENSSL_NO_KTLS
    md2                 [default]   OPENSSL_NO_MD2 (skip crypto\md2)
    msan                [default]   OPENSSL_NO_MSAN
    rc5                 [default]   OPENSSL_NO_RC5 (skip crypto\rc5)
    sctp                [default]   OPENSSL_NO_SCTP
    ssl-trace           [default]   OPENSSL_NO_SSL_TRACE
    trace               [default]   OPENSSL_NO_TRACE
    ubsan               [default]   OPENSSL_NO_UBSAN
    unit-test           [default]   OPENSSL_NO_UNIT_TEST
    weak-ssl-ciphers    [default]   OPENSSL_NO_WEAK_SSL_CIPHERS
    zlib                [default]   
    zlib-dynamic        [default]   
    ssl3                [default]   OPENSSL_NO_SSL3
    ssl3-method         [default]   OPENSSL_NO_SSL3_METHOD

Config target attributes:

    AR => "lib",
    ARFLAGS => "/nologo",
    AS => "ml64",
    ASFLAGS => "/nologo /Zi",
    CC => "cl",
    CFLAGS => "/W3 /wd4090 /nologo /O2",
    CPP => "\"\$(CC)\" /EP /C",
    HASHBANGPERL => "/usr/bin/env perl",
    LD => "link",
    LDFLAGS => "/nologo /debug",
    MT => "mt",
    MTFLAGS => "-nologo",
    RANLIB => "CODE(0x25cf490)",
    RC => "rc",
    ar_resp_delim => "
",
    aroutflag => "/out:",
    asflags => "/c /Cp /Cx",
    asm_arch => "x86_64",
    asoutflag => "/Fo",
    bin_cflags => "/Zi /Fdapp.pdb",
    bin_lflags => "setargv.obj /subsystem:console /opt:ref",
    bn_ops => "SIXTY_FOUR_BIT",
    build_file => "makefile",
    build_scheme => [ "unified", "windows", "VC-common" ],
    cflags => "/Gs0 /GF /Gy /MD",
    coutflag => "/Fo",
    cpp_depend_flags => "/Zs /showIncludes",
    cppflags => "",
    defines => [ "OPENSSL_BUILDING_OPENSSL", "OPENSSL_SYS_WIN32", "WIN32_LEAN_AND_MEAN", "UNICODE", "_UNICODE", "_CRT_SECURE_NO_DEPRECATE", "_WINSOCK_DEPRECATED_NO_WARNINGS" ],
    disable => [  ],
    dso_cflags => "/Zi /Fddso.pdb",
    dso_scheme => "win32",
    enable => [  ],
    ex_libs => "ws2_32.lib gdi32.lib advapi32.lib crypt32.lib user32.lib",
    includes => [  ],
    ld_implib_flag => "/implib:",
    ld_resp_delim => "
",
    lddefflag => "/def:",
    ldoutflag => "/out:",
    ldpostoutflag => "",
    ldresflag => " ",
    lflags => "",
    lib_cflags => "/Zi /Fdossl_static.pdb",
    lib_cppflags => "",
    lib_defines => [ "L_ENDIAN" ],
    module_cflags => "",
    module_cxxflags => undef,
    module_ldflags => "/dll",
    mtinflag => "-manifest ",
    mtoutflag => "-outputresource:",
    multilib => "-x64",
    perl_platform => "Windows::MSVC",
    perlasm_scheme => "auto",
    rcoutflag => "/fo",
    shared_cflag => "",
    shared_defflag => "",
    shared_defines => [  ],
    shared_ldflag => "/dll",
    shared_rcflag => "",
    shared_target => "win-shared",
    sys_id => "WIN64A",
    thread_defines => [  ],
    thread_scheme => "winthreads",
    unistd => "<unistd.h>",
    uplink_arch => "x86_64",

Recorded environment:

    AR = 
    ARFLAGS = 
    AS = 
    ASFLAGS = 
    BUILDFILE = 
    CC = 
    CFLAGS = 
    CPP = 
    CPPDEFINES = 
    CPPFLAGS = 
    CPPINCLUDES = 
    CROSS_COMPILE = 
    CXX = 
    CXXFLAGS = 
    HASHBANGPERL = 
    LD = 
    LDFLAGS = 
    LDLIBS = 
    MT = 
    MTFLAGS = 
    OPENSSL_LOCAL_CONFIG_DIR = 
    PERL = 
    RANLIB = 
    RC = 
    RCFLAGS = 
    RM = 
    WINDRES = 
    __CNF_CFLAGS = 
    __CNF_CPPDEFINES = 
    __CNF_CPPFLAGS = 
    __CNF_CPPINCLUDES = 
    __CNF_CXXFLAGS = 
    __CNF_LDFLAGS = 
    __CNF_LDLIBS = 

Makevars:

    AR              = lib
    ARFLAGS         = /nologo
    AS              = ml64
    ASFLAGS         = /nologo /Zi
    CC              = cl
    CFLAGS          = /W3 /wd4090 /nologo /O2
    CPP             = "$(CC)" /EP /C
    CPPDEFINES      = 
    CPPFLAGS        = 
    CPPINCLUDES     = 
    CXXFLAGS        = 
    HASHBANGPERL    = /usr/bin/env perl
    LD              = link
    LDFLAGS         = /nologo /debug
    LDLIBS          = 
    MT              = mt
    MTFLAGS         = -nologo
    PERL            = D:\linux\perl\bin\perl.exe
    RC              = rc
    RCFLAGS         = 

NOTE: These variables only represent the configuration view.  The build file
template may have processed these variables further, please have a look at the
build file for more exact data:
    makefile

build file:

    makefile

build file templates:

    Configurations\common0.tmpl
    Configurations\windows-makefile.tmpl
    Configurations\common.tmpl

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19 (18 by maintainers)

Commits related to this issue

Most upvoted comments

I’m reworking #15006 to accomodate for language variance for VC, among others.

Ok, it turns that on my computer only the german language pack was enabled.

image

I don’t recall deselecting the english language pack explicitly, I guess that VS simply installs only one language pack, the one for the language which you get to choose during the initial setup.

The consequence is that you can’t rely on being able to switch to english output.

Fun fact for @tanzislam and @levitte: I just happened to look into libcrypto-lib-bio_enc.d and this is what I found:

...
Hinweis: Einlesen der Datei:   C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\time.h
Hinweis: Einlesen der Datei:    C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\corecrt_wtime.h
Hinweis: Einlesen der Datei:   C:\src\openssl\include\openssl/e_os2.h
Hinweis: Einlesen der Datei:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29910\include\stdint.h
...

It seems like the add-depends.pl script doesn’t work anyway if the compiler emits localized messages (which is the default in Visual Studio):

https://github.com/openssl/openssl/blob/d830526c711074fdcd82c70c24c31444366a1ed8/util/add-depends.pl#L191

And why they are not optional(adding some flags like --gen-dependency should trigger creating them, in build time)

There is a configuration option to turn them off: no-makedepend

I it really necessary to have two passes, couldn’t that be done in one pass? That would save a lot of time I guess.

/showIncludes prints on stderr, alongside all the error messages, warnings, … there’s no way to get it to a separate file that I know of. Yeah, that’s a royal pain 😕 .

What also confuses me that the dependencies of the module are generated after building it. How does this make sense?

They are generated during build (it doesn’t really matter which of the two commands come first in the same rule). The idea is that with a pristine checkout, everything will be built anyway, so knowing all the dependencies isn’t really necessary. On the next build, you should have a full set of .d files, which are integrated into the Makefile. Most of the times, this just works… occasionally, when you move stuff around and add another include, or remove one, you need to run nmake twice… The basic idea is that make depend shouldn’t be a manual step, it should be as automated as possible.

NUL device is much slower than writing to a file

Windows always surprises me.

Oh! The command to create the dependency files has changed from $(CC) to $(CPP)… the latter has the flag /EP, which is “Preprocess to stdout Without #line Directives”… that’s a sudden [censor]load of text to process!

It might be wise to have a separate config target command attribute specifically for generating dependency data…