configure, cmake, lib: more form api deprecation

Introduce a --enable-form-api configure option to control its inclusion
in builds. The condition name defined for it is CURL_DISABLE_FORM_API.

Form api code is dependent of MIME: configure and CMake handle this
dependency automatically: CMake by making it a dependent option
explicitly, configure by inheriting the MIME value by default and
rejecting explicit incompatible values.

"form-api" is now a new hidden test feature.

Update libcurl modules to respect this option and adjust tests
accordingly.

Closes #9621
This commit is contained in:
Patrick Monnerat 2022-11-15 17:50:22 +01:00 committed by Daniel Stenberg
parent 50e563253d
commit 038c46f61f
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
18 changed files with 62 additions and 19 deletions

View File

@ -199,6 +199,9 @@ option(CURL_DISABLE_DOH "disables DNS-over-HTTPS" OFF)
mark_as_advanced(CURL_DISABLE_DOH)
option(CURL_DISABLE_FILE "disables FILE" OFF)
mark_as_advanced(CURL_DISABLE_FILE)
cmake_dependent_option(CURL_DISABLE_FORM_API "disables form api" OFF
"NOT CURL_DISABLE_MIME" ON)
mark_as_advanced(CURL_DISABLE_FORM_API)
option(CURL_DISABLE_FTP "disables FTP" OFF)
mark_as_advanced(CURL_DISABLE_FTP)
option(CURL_DISABLE_GETOPTIONS "disables curl_easy_options API for existing options to curl_easy_setopt" OFF)

View File

@ -4126,6 +4126,32 @@ AS_HELP_STRING([--disable-mime],[Disable mime API support]),
AC_MSG_RESULT(yes)
)
dnl ************************************************************
dnl disable form API support
dnl
AC_MSG_CHECKING([whether to support the form API])
AC_ARG_ENABLE(form-api,
AS_HELP_STRING([--enable-form-api],[Enable form API support])
AS_HELP_STRING([--disable-form-api],[Disable form API support]),
[ case "$enableval" in
no) AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API])
;;
*) AC_MSG_RESULT(yes)
test "$enable_mime" = no &&
AC_MSG_ERROR(MIME support needs to be enabled in order to enable form API support)
;;
esac ],
[
if test "$enable_mime" = no; then
enable_form_api=no
AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API])
else
AC_MSG_RESULT(yes)
fi ]
)
dnl ************************************************************
dnl disable date parsing
dnl

View File

@ -24,6 +24,10 @@ Disable DNS-over-HTTPS
Disable the FILE protocol
## `CURL_DISABLE_FORM_API`
Disable the form API
## `CURL_DISABLE_FTP`
Disable the FTP (and FTPS) protocol

View File

@ -50,6 +50,9 @@
/* disables FILE */
#cmakedefine CURL_DISABLE_FILE 1
/* disables form api */
#cmakedefine CURL_DISABLE_FORM_API 1
/* disables FTP */
#cmakedefine CURL_DISABLE_FTP 1

View File

@ -27,7 +27,7 @@
#include <curl/curl.h>
#include "formdata.h"
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API)
#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
@ -941,7 +941,7 @@ int curl_formget(struct curl_httppost *form, void *arg,
void curl_formfree(struct curl_httppost *form)
{
(void)form;
/* does nothing HTTP is disabled */
/* Nothing to do. */
}
#endif /* if disabled */

View File

@ -26,7 +26,7 @@
#include "curl_setup.h"
#ifndef CURL_DISABLE_MIME
#ifndef CURL_DISABLE_FORM_API
/* used by FormAdd for temporary storage */
struct FormInfo {
@ -53,10 +53,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
curl_mimepart *,
struct curl_httppost *post,
curl_read_callback fread_func);
#else
/* disabled */
#define Curl_getformdata(a,b,c,d) CURLE_NOT_BUILT_IN
#endif
#endif /* CURL_DISABLE_FORM_API */
#endif /* HEADER_CURL_FORMDATA_H */

View File

@ -2372,6 +2372,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
case HTTPREQ_POST_MIME:
http->sendit = &data->set.mimepost;
break;
#ifndef CURL_DISABLE_FORM_API
case HTTPREQ_POST_FORM:
/* Convert the form structure into a mime structure. */
Curl_mime_cleanpart(&http->form);
@ -2381,6 +2382,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
return result;
http->sendit = &http->form;
break;
#endif
default:
http->sendit = NULL;
}

View File

@ -666,7 +666,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->set.method = HTTPREQ_GET;
break;
#ifndef CURL_DISABLE_MIME
#ifndef CURL_DISABLE_FORM_API
case CURLOPT_HTTPPOST:
/*
* Set to make us do HTTP POST

View File

@ -4,20 +4,21 @@
unittest
curl_formadd
curl_formget
FORM
</keywords>
</info>
#
# Client-side
<client>
<server>
none
</server>
<features>
unittest
http
Mime
form-api
</features>
<server>
none
</server>
<name>
formpost unit tests
</name>

View File

@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
FORM
</keywords>
</info>
@ -22,7 +23,7 @@ OK
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
FORM
</keywords>
</info>
@ -39,7 +40,7 @@ hello
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
FORM
flaky
</keywords>
</info>
@ -17,7 +18,7 @@ flaky
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -24,7 +24,7 @@ hello
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -24,7 +24,7 @@ hello
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -33,7 +33,7 @@ hello
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -33,7 +33,7 @@ hello
# Client-side
<client>
<features>
Mime
form-api
</features>
<server>
http

View File

@ -783,6 +783,7 @@ sub checksystemfeatures {
$feature{"DoH"} = 1;
$feature{"HTTP-auth"} = 1;
$feature{"Mime"} = 1;
$feature{"form-api"} = 1;
$feature{"netrc"} = 1;
$feature{"parsedate"} = 1;
$feature{"proxy"} = 1;

View File

@ -78,6 +78,9 @@ static const char *disabled[]={
#endif
#ifndef USE_XATTR
"xattr",
#endif
#ifdef CURL_DISABLE_FORM_API
"form-api",
#endif
NULL
};