{- use File::Spec::Functions;
   our $ex_inc = $withargs{fuzzer_include} &&
       (file_name_is_absolute($withargs{fuzzer_include}) ?
        $withargs{fuzzer_include} : catdir(updir(), $withargs{fuzzer_include}));
   our $ex_lib = $withargs{fuzzer_lib} &&
       (file_name_is_absolute($withargs{fuzzer_lib}) ?
        $withargs{fuzzer_lib} : catfile(updir(), $withargs{fuzzer_lib}));
   ""
-}

IF[{- !$disabled{"fuzz-afl"} || !$disabled{"fuzz-libfuzzer"} -}]
  PROGRAMS{noinst}=asn1 asn1parse bignum bndiv client conf crl server smime
  PROGRAMS{noinst}=pkcs12 punycode pem decoder hashtable acert
  PROGRAMS{noinst}=v3name
  PROGRAMS{noinst}=provider

  IF[{- !$disabled{"ml-kem"} -}]
    PROGRAMS{noinst}=ml-kem
  ENDIF

  IF[{- !$disabled{"ml-dsa"} -}]
    PROGRAMS{noinst}=ml-dsa
  ENDIF

  IF[{- !$disabled{"slh-dsa"} -}]
    PROGRAMS{noinst}=slh-dsa
  ENDIF

  IF[{- !$disabled{"cmp"} -}]
    PROGRAMS{noinst}=cmp
  ENDIF

  IF[{- !$disabled{"cms"} -}]
    PROGRAMS{noinst}=cms
  ENDIF

  IF[{- !$disabled{"ct"} -}]
    PROGRAMS{noinst}=ct
  ENDIF

  IF[{- !$disabled{"ocsp"} -}]
    PROGRAMS{noinst}=x509
  ENDIF

  IF[{- !$disabled{"quic"} -}]
    PROGRAMS{noinst}=quic-client quic-server quic-srtm quic-lcidm quic-rcidm
  ENDIF

  IF[{- !$disabled{"dtls"} -}]
    PROGRAMS{noinst}=dtlsclient dtlsserver
  ENDIF

  SOURCE[asn1]=asn1.c driver.c fuzz_rand.c
  INCLUDE[asn1]=../include {- $ex_inc -}
  DEPEND[asn1]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[asn1parse]=asn1parse.c driver.c
  INCLUDE[asn1parse]=../include {- $ex_inc -}
  DEPEND[asn1parse]=../libcrypto {- $ex_lib -}

  SOURCE[bignum]=bignum.c driver.c
  INCLUDE[bignum]=../include {- $ex_inc -}
  DEPEND[bignum]=../libcrypto {- $ex_lib -}

  SOURCE[bndiv]=bndiv.c driver.c
  INCLUDE[bndiv]=../include {- $ex_inc -}
  DEPEND[bndiv]=../libcrypto {- $ex_lib -}

  SOURCE[client]=client.c driver.c fuzz_rand.c
  INCLUDE[client]=../include {- $ex_inc -}
  DEPEND[client]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[cmp]=cmp.c driver.c fuzz_rand.c
  INCLUDE[cmp]=../include {- $ex_inc -}
  DEPEND[cmp]=../libcrypto {- $ex_lib -}

  SOURCE[slh-dsa]=slh-dsa.c driver.c fuzz_rand.c
  INCLUDE[slh-dsa]=../include {- $ex_inc -}
  DEPEND[slh-dsa]=../libcrypto {- $ex_lib -}

  SOURCE[cms]=cms.c driver.c
  INCLUDE[cms]=../include {- $ex_inc -}
  DEPEND[cms]=../libcrypto {- $ex_lib -}

  SOURCE[pkcs12]=pkcs12.c driver.c
  INCLUDE[pkcs12]=../include {- $ex_inc -}
  DEPEND[pkcs12]=../libcrypto {- $ex_lib -}

  SOURCE[conf]=conf.c driver.c
  INCLUDE[conf]=../include {- $ex_inc -}
  DEPEND[conf]=../libcrypto {- $ex_lib -}

  SOURCE[crl]=crl.c driver.c
  INCLUDE[crl]=../include {- $ex_inc -}
  DEPEND[crl]=../libcrypto {- $ex_lib -}

  SOURCE[ct]=ct.c driver.c
  INCLUDE[ct]=../include {- $ex_inc -}
  DEPEND[ct]=../libcrypto {- $ex_lib -}

  SOURCE[dtlsclient]=dtlsclient.c driver.c fuzz_rand.c
  INCLUDE[dtlsclient]=../include {- $ex_inc -}
  DEPEND[dtlsclient]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[dtlsserver]=dtlsserver.c driver.c fuzz_rand.c
  INCLUDE[dtlsserver]=../include {- $ex_inc -}
  DEPEND[dtlsserver]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[pem]=pem.c driver.c
  INCLUDE[pem]=../include {- $ex_inc -}
  DEPEND[pem]=../libcrypto.a {- $ex_lib -}

  SOURCE[decoder]=decoder.c driver.c fuzz_rand.c
  INCLUDE[decoder]=../include {- $ex_inc -}
  DEPEND[decoder]=../libcrypto {- $ex_lib -}

  SOURCE[hashtable]=hashtable.c driver.c
  INCLUDE[hashtable]=../include {- $ex_inc -}
  DEPEND[hashtable]=../libcrypto {- $ex_lib -}

  SOURCE[acert]=acert.c driver.c
  INCLUDE[acert]=../include {- $ex_inc -}
  DEPEND[acert]=../libcrypto {- $ex_lib -}

  SOURCE[punycode]=punycode.c driver.c
  INCLUDE[punycode]=../include {- $ex_inc -}
  DEPEND[punycode]=../libcrypto.a {- $ex_lib -}

  SOURCE[smime]=smime.c driver.c
  INCLUDE[smime]=../include {- $ex_inc -}
  DEPEND[smime]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[v3name]=v3name.c driver.c
  INCLUDE[v3name]=../include {- $ex_inc -}
  DEPEND[v3name]=../libcrypto.a {- $ex_lib -}

  SOURCE[quic-client]=quic-client.c driver.c fuzz_rand.c
  INCLUDE[quic-client]=../include {- $ex_inc -}
  DEPEND[quic-client]=../libcrypto.a ../libssl.a {- $ex_lib -}

  SOURCE[quic-server]=quic-server.c driver.c fuzz_rand.c
  INCLUDE[quic-server]=../include {- $ex_inc -}
  DEPEND[quic-server]=../libcrypto.a ../libssl.a {- $ex_lib -}

  SOURCE[quic-srtm]=quic-srtm.c driver.c fuzz_rand.c
  INCLUDE[quic-srtm]=../include {- $ex_inc -}
  DEPEND[quic-srtm]=../libcrypto.a ../libssl.a {- $ex_lib -}

  SOURCE[quic-lcidm]=quic-lcidm.c driver.c fuzz_rand.c
  INCLUDE[quic-lcidm]=../include {- $ex_inc -}
  DEPEND[quic-lcidm]=../libcrypto.a ../libssl.a {- $ex_lib -}

  SOURCE[quic-rcidm]=quic-rcidm.c driver.c fuzz_rand.c
  INCLUDE[quic-rcidm]=../include {- $ex_inc -}
  DEPEND[quic-rcidm]=../libcrypto.a ../libssl.a {- $ex_lib -}

  SOURCE[server]=server.c driver.c fuzz_rand.c
  INCLUDE[server]=../include {- $ex_inc -}
  DEPEND[server]=../libcrypto ../libssl {- $ex_lib -}

  SOURCE[x509]=x509.c driver.c fuzz_rand.c
  INCLUDE[x509]=../include {- $ex_inc -}
  DEPEND[x509]=../libcrypto {- $ex_lib -}

  SOURCE[provider]=provider.c driver.c
  INCLUDE[provider]=../include {- $ex_inc -}
  DEPEND[provider]=../libcrypto {- $ex_lib -}

  SOURCE[ml-kem]=ml-kem.c driver.c
  INCLUDE[ml-kem]=../include {- $ex_inc -}
  DEPEND[ml-kem]=../libcrypto {- $ex_lib -}

  SOURCE[ml-dsa]=ml-dsa.c driver.c
  INCLUDE[ml-dsa]=../include {- $ex_inc -}
  DEPEND[ml-dsa]=../libcrypto {- $ex_lib -}
ENDIF

IF[{- !$disabled{tests} -}]
  PROGRAMS{noinst}=asn1-test asn1parse-test bignum-test bndiv-test client-test conf-test crl-test server-test smime-test
  PROGRAMS{noinst}=pkcs12-test punycode-test pem-test decoder-test hashtable-test acert-test
  PROGRAMS{noinst}=v3name-test
  PROGRAMS{noinst}=provider-test

  IF[{- !$disabled{"ml-kem"} -}]
    PROGRAMS{noinst}=ml-kem-test
  ENDIF

  IF[{- !$disabled{"ml-dsa"} -}]
    PROGRAMS{noinst}=ml-dsa-test
  ENDIF

  IF[{- !$disabled{"slh-dsa"} -}]
    PROGRAMS{noinst}=slh-dsa-test
  ENDIF

  IF[{- !$disabled{"cmp"} -}]
    PROGRAMS{noinst}=cmp-test
  ENDIF

  IF[{- !$disabled{"cms"} -}]
    PROGRAMS{noinst}=cms-test
  ENDIF

  IF[{- !$disabled{"ct"} -}]
    PROGRAMS{noinst}=ct-test
  ENDIF

  IF[{- !$disabled{"ocsp"} -}]
    PROGRAMS{noinst}=x509-test
  ENDIF

  IF[{- !$disabled{"quic"} -}]
    PROGRAMS{noinst}=quic-client-test quic-server-test quic-srtm-test quic-lcidm-test
    PROGRAMS{noinst}=quic-rcidm-test
  ENDIF

  IF[{- !$disabled{"dtls"} -}]
    PROGRAMS{noinst}=dtlsclient-test dtlsserver-test
  ENDIF

  SOURCE[asn1-test]=asn1.c test-corpus.c fuzz_rand.c
  INCLUDE[asn1-test]=../include
  DEPEND[asn1-test]=../libcrypto ../libssl

  SOURCE[asn1parse-test]=asn1parse.c test-corpus.c
  INCLUDE[asn1parse-test]=../include
  DEPEND[asn1parse-test]=../libcrypto

  SOURCE[bignum-test]=bignum.c test-corpus.c
  INCLUDE[bignum-test]=../include
  DEPEND[bignum-test]=../libcrypto

  SOURCE[bndiv-test]=bndiv.c test-corpus.c
  INCLUDE[bndiv-test]=../include
  DEPEND[bndiv-test]=../libcrypto

  SOURCE[client-test]=client.c test-corpus.c fuzz_rand.c
  INCLUDE[client-test]=../include
  DEPEND[client-test]=../libcrypto ../libssl

  SOURCE[cmp-test]=cmp.c test-corpus.c fuzz_rand.c
  INCLUDE[cmp-test]=../include
  DEPEND[cmp-test]=../libcrypto.a
  # referring to static lib allows using non-exported functions

  SOURCE[ml-kem-test]=ml-kem.c test-corpus.c fuzz_rand.c
  INCLUDE[ml-kem-test]=../include
  DEPEND[ml-kem-test]=../libcrypto.a
  # referring to static lib allows using non-exported functions

  SOURCE[ml-dsa-test]=ml-dsa.c test-corpus.c fuzz_rand.c
  INCLUDE[ml-dsa-test]=../include
  DEPEND[ml-dsa-test]=../libcrypto.a
  # referring to static lib allows using non-exported functions

  SOURCE[slh-dsa-test]=slh-dsa.c test-corpus.c fuzz_rand.c
  INCLUDE[slh-dsa-test]=../include
  DEPEND[slh-dsa-test]=../libcrypto.a
  # referring to static lib allows using non-exported functions

  SOURCE[cms-test]=cms.c test-corpus.c
  INCLUDE[cms-test]=../include
  DEPEND[cms-test]=../libcrypto

  SOURCE[pkcs12-test]=pkcs12.c test-corpus.c
  INCLUDE[pkcs12-test]=../include
  DEPEND[pkcs12-test]=../libcrypto

  SOURCE[conf-test]=conf.c test-corpus.c
  INCLUDE[conf-test]=../include
  DEPEND[conf-test]=../libcrypto

  SOURCE[crl-test]=crl.c test-corpus.c
  INCLUDE[crl-test]=../include
  DEPEND[crl-test]=../libcrypto

  SOURCE[ct-test]=ct.c test-corpus.c
  INCLUDE[ct-test]=../include
  DEPEND[ct-test]=../libcrypto

  SOURCE[dtlsclient-test]=dtlsclient.c test-corpus.c fuzz_rand.c
  INCLUDE[dtlsclient-test]=../include
  DEPEND[dtlsclient-test]=../libcrypto ../libssl

  SOURCE[dtlsserver-test]=dtlsserver.c test-corpus.c fuzz_rand.c
  INCLUDE[dtlsserver-test]=../include
  DEPEND[dtlsserver-test]=../libcrypto ../libssl

  SOURCE[pem-test]=pem.c test-corpus.c
  INCLUDE[pem-test]=../include
  DEPEND[pem-test]=../libcrypto.a

  SOURCE[decoder-test]=decoder.c test-corpus.c fuzz_rand.c
  INCLUDE[decoder-test]=../include
  DEPEND[decoder-test]=../libcrypto

  SOURCE[hashtable-test]=hashtable.c test-corpus.c fuzz_rand.c
  INCLUDE[hashtable-test]=../include
  DEPEND[hashtable-test]=../libcrypto.a

  SOURCE[acert-test]=acert.c test-corpus.c
  INCLUDE[acert-test]=../include
  DEPEND[acert-test]=../libcrypto

  SOURCE[punycode-test]=punycode.c test-corpus.c
  INCLUDE[punycode-test]=../include
  DEPEND[punycode-test]=../libcrypto.a

  SOURCE[smime-test]=smime.c test-corpus.c
  INCLUDE[smime-test]=../include
  DEPEND[smime-test]=../libcrypto ../libssl

  SOURCE[v3name-test]=v3name.c test-corpus.c
  INCLUDE[v3name-test]=../include
  DEPEND[v3name-test]=../libcrypto.a

  SOURCE[quic-client-test]=quic-client.c test-corpus.c fuzz_rand.c
  INCLUDE[quic-client-test]=../include
  DEPEND[quic-client-test]=../libcrypto.a ../libssl.a

  SOURCE[quic-server-test]=quic-server.c test-corpus.c fuzz_rand.c
  INCLUDE[quic-server-test]=../include
  DEPEND[quic-server-test]=../libcrypto.a ../libssl.a

  SOURCE[quic-srtm-test]=quic-srtm.c test-corpus.c fuzz_rand.c
  INCLUDE[quic-srtm-test]=../include
  DEPEND[quic-srtm-test]=../libcrypto.a ../libssl.a

  SOURCE[quic-lcidm-test]=quic-lcidm.c test-corpus.c fuzz_rand.c
  INCLUDE[quic-lcidm-test]=../include
  DEPEND[quic-lcidm-test]=../libcrypto.a ../libssl.a

  SOURCE[quic-rcidm-test]=quic-rcidm.c test-corpus.c fuzz_rand.c
  INCLUDE[quic-rcidm-test]=../include
  DEPEND[quic-rcidm-test]=../libcrypto.a ../libssl.a

  SOURCE[server-test]=server.c test-corpus.c fuzz_rand.c
  INCLUDE[server-test]=../include
  DEPEND[server-test]=../libcrypto ../libssl

  SOURCE[x509-test]=x509.c test-corpus.c fuzz_rand.c
  INCLUDE[x509-test]=../include
  DEPEND[x509-test]=../libcrypto

  SOURCE[provider-test]=provider.c test-corpus.c
  INCLUDE[provider-test]=../include
  DEPEND[provider-test]=../libcrypto
ENDIF
