build: drop tool_hugehelp.c.cvs, tidy up macros, drop buildconf.bat

Rework the way `tool_hugehelp.c` is included in builds.

After this patch, with `./configure` and CMake `tool_hugehelp.c` is only
compiled when building with manuals enabled. With manuals disabled this
source file is not used anymore. The method is similar to how
8a3740bc8e implemented `tool_ca_embed.c`.
`./configure` always generates it as before, otherwise the build fails.

- winbuild: rework to not need `buildconf.bat`, but automatically use
  `tool_hugehelp.c` if present (e.g. when building from an official
  source tarball) and enable `USE_MANUAL` accordingly.

- `buildconf.bat`: after dropping `tool_hugehelp.c` generation, the only
  logic left was `cp Makefile.dist Makefile`. This allowed to launch
  winbuild builds via GNU Make in a Git repo. Drop this option together
  with the batch file.

- build `libcurltool` without `USE_MANUAL` macro to exclude the manual
  and the dependence on the generator commands. Drop relying on
  `UNITTESTS` for this purpose.
  Follow-up to 96843f4ef7 #16068

- `src/mkhelp.pl`: include `tool_hugehelp.h` before using `USE_MANUAL`
  to have it set in `config-*.h` builds with source tarballs created
  with manual but without zlib.

Closes #16081
This commit is contained in:
Viktor Szakats 2025-01-24 14:22:23 +01:00
parent 1a36923d73
commit 0035ff45c5
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
18 changed files with 32 additions and 374 deletions

View File

@ -29,7 +29,6 @@ gitonly=".git*
^scripts/installcheck.sh
^scripts/release-notes.pl
^scripts/singleuse.pl
^src/tool_hugehelp.c.cvs
^tests/CI.md"
tarfiles="$(mktemp)"

View File

@ -21,10 +21,6 @@ Daniel uses a configure line similar to this for easier development:
./configure --disable-shared --enable-debug --enable-maintainer-mode
In environments that do not support configure (i.e. Windows), do this:
buildconf.bat
## REQUIREMENTS
See [docs/INTERNALS.md][0] for requirement details.

View File

@ -83,7 +83,7 @@ PLAN9_DIST = plan9/include/mkfile \
EXTRA_DIST = CHANGES.md COPYING Makefile.dist \
RELEASE-NOTES $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) \
$(PLAN9_DIST) buildconf.bat Dockerfile
$(PLAN9_DIST) Dockerfile
DISTCLEANFILES = buildinfo.txt

View File

@ -30,28 +30,13 @@ ssl:
./configure --with-openssl
make
vc:
cd winbuild
nmake /f Makefile.vc MACHINE=x86
vc-x64:
cd winbuild
nmake /f Makefile.vc MACHINE=x64
cygwin:
./configure
make
cygwin-ssl:
./configure --with-openssl
make
cygwin: all
cygwin-ssl: ssl
unix: all
unix-ssl: ssl
linux: all
linux-ssl: ssl
ca-bundle: scripts/mk-ca-bundle.pl

View File

@ -75,7 +75,6 @@ elif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then
)
curl="build/Win32/${VC_VERSION}/${PRJ_CFG}/curld.exe"
elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2015' ]; then
./buildconf.bat
(
cd winbuild
cat << EOF > _make.bat
@ -88,7 +87,6 @@ EOF
)
curl="builds/libcurl-vc14-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe"
elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2017' ]; then
./buildconf.bat
(
cd winbuild
cat << EOF > _make.bat

View File

@ -1,265 +0,0 @@
@echo off
rem ***************************************************************************
rem * _ _ ____ _
rem * Project ___| | | | _ \| |
rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
rem *
rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms
rem * are also available at https://curl.se/docs/copyright.html.
rem *
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
rem * copies of the Software, and permit persons to whom the Software is
rem * furnished to do so, under the terms of the COPYING file.
rem *
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
rem * KIND, either express or implied.
rem *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
rem NOTES
rem
rem This batch file must be used to set up a git tree to build on systems where
rem there is no autotools support (i.e. DOS and Windows).
rem
:begin
rem Set our variables
if "%OS%" == "Windows_NT" setlocal
set MODE=GENERATE
rem Switch to this batch file's directory
cd /d "%~0\.." 1>NUL 2>&1
rem Check we are running from a curl git repository
if not exist GIT-INFO.md goto norepo
:parseArgs
if "%~1" == "" goto start
if /i "%~1" == "-clean" (
set MODE=CLEAN
) else if /i "%~1" == "-?" (
goto syntax
) else if /i "%~1" == "-h" (
goto syntax
) else if /i "%~1" == "-help" (
goto syntax
) else (
goto unknown
)
shift & goto parseArgs
:start
if "%MODE%" == "GENERATE" (
echo.
echo Generating prerequisite files
call :generate
if errorlevel 3 goto nogenhugehelp
if errorlevel 2 goto nogenmakefile
if errorlevel 1 goto warning
) else (
echo.
echo Removing prerequisite files
call :clean
if errorlevel 2 goto nocleanhugehelp
if errorlevel 1 goto nocleanmakefile
)
goto success
rem Main generate function.
rem
rem Returns:
rem
rem 0 - success
rem 1 - success with simplified tool_hugehelp.c
rem 2 - failed to generate Makefile
rem 3 - failed to generate tool_hugehelp.c
rem
:generate
if "%OS%" == "Windows_NT" setlocal
set BASIC_HUGEHELP=0
rem Create Makefile
echo * %CD%\Makefile
if exist Makefile.dist (
copy /Y Makefile.dist Makefile 1>NUL 2>&1
if errorlevel 1 (
if "%OS%" == "Windows_NT" endlocal
exit /B 2
)
)
rem Create tool_hugehelp.c
echo * %CD%\src\tool_hugehelp.c
call :genHugeHelp
if errorlevel 2 (
if "%OS%" == "Windows_NT" endlocal
exit /B 3
)
if errorlevel 1 (
set BASIC_HUGEHELP=1
)
cmd /c exit 0
if "%BASIC_HUGEHELP%" == "1" (
if "%OS%" == "Windows_NT" endlocal
exit /B 1
)
if "%OS%" == "Windows_NT" endlocal
exit /B 0
rem Main clean function.
rem
rem Returns:
rem
rem 0 - success
rem 1 - failed to clean Makefile
rem 2 - failed to clean tool_hugehelp.c
rem
:clean
rem Remove Makefile
echo * %CD%\Makefile
if exist Makefile (
del Makefile 2>NUL
if exist Makefile (
exit /B 1
)
)
rem Remove tool_hugehelp.c
echo * %CD%\src\tool_hugehelp.c
if exist src\tool_hugehelp.c (
del src\tool_hugehelp.c 2>NUL
if exist src\tool_hugehelp.c (
exit /B 2
)
)
exit /B
rem Function to generate src\tool_hugehelp.c
rem
rem Returns:
rem
rem 0 - full tool_hugehelp.c generated
rem 1 - simplified tool_hugehelp.c
rem 2 - failure
rem
:genHugeHelp
if "%OS%" == "Windows_NT" setlocal
set LC_ALL=C
set BASIC=1
if exist src\tool_hugehelp.c.cvs (
copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
) else (
echo #include "tool_setup.h"> src\tool_hugehelp.c
echo #include "tool_hugehelp.h">> src\tool_hugehelp.c
echo.>> src\tool_hugehelp.c
echo void hugehelp(void^)>> src\tool_hugehelp.c
echo {>> src\tool_hugehelp.c
echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
echo #endif>> src\tool_hugehelp.c
echo }>> src\tool_hugehelp.c
)
findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
if errorlevel 1 (
if "%OS%" == "Windows_NT" endlocal
exit /B 2
)
if "%BASIC%" == "1" (
if "%OS%" == "Windows_NT" endlocal
exit /B 1
)
if "%OS%" == "Windows_NT" endlocal
exit /B 0
rem Function to clean-up local variables under DOS, Windows 3.x and
rem Windows 9x as setlocal isn't available until Windows NT
rem
:dosCleanup
set MODE=
set BASIC_HUGEHELP=
set LC_ALL
set BASIC=
exit /B
:syntax
rem Display the help
echo.
echo Usage: buildconf [-clean]
echo.
echo -clean - Removes the files
goto error
:unknown
echo.
echo Error: Unknown argument '%1'
goto error
:norepo
echo.
echo Error: This batch file should only be used with a curl git repository
goto error
:nogenmakefile
echo.
echo Error: Unable to generate Makefile
goto error
:nogenhugehelp
echo.
echo Error: Unable to generate src\tool_hugehelp.c
goto error
:nocleanmakefile
echo.
echo Error: Unable to clean Makefile
goto error
:nocleanhugehelp
echo.
echo Error: Unable to clean src\tool_hugehelp.c
goto error
:warning
echo.
echo Warning: The curl manual could not be integrated in the source. This means when
echo you build curl the manual will not be available (curl --manual^). Integration of
echo the manual is not required and a summary of the options will still be available
echo (curl --help^). To integrate the manual build with configure or cmake.
goto success
:error
if "%OS%" == "Windows_NT" (
endlocal
) else (
call :dosCleanup
)
exit /B 1
:success
if "%OS%" == "Windows_NT" (
endlocal
) else (
call :dosCleanup
)
exit /B 0

View File

@ -303,10 +303,6 @@ prompt](../winbuild/README.md#open-a-command-prompt)):
% cd curl/winbuild
% nmake /f Makefile.vc mode=dll WITH_MSH3=dll MSH3_PATH="C:/Program Files/msh3" MACHINE=x64
**Note** - If you encounter a build error with `tool_hugehelp.c` being
missing, rename `tool_hugehelp.c.cvs` in the same directory to
`tool_hugehelp.c` and then run `nmake` again.
Run in the `C:/Program Files/msh3/lib` directory, copy `curl.exe` to that
directory, or copy `msquic.dll` and `msh3.dll` from that directory to the
`curl.exe` directory. For example:

View File

@ -500,11 +500,6 @@ Vista
# endif /* UNDER_CE */
#endif /* !CURL_OS */
/* If you want to build curl with the built-in manual */
#ifndef UNDER_CE
#define USE_MANUAL 1
#endif
/* ---------------------------------------------------------------- */
/* Windows CE */
/* ---------------------------------------------------------------- */

View File

@ -26,9 +26,10 @@ add_definitions("-DBUILDING_CURL")
set(_curl_cfiles_gen "")
set(_curl_hfiles_gen "")
set(_curl_definitions "")
if(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS)
add_definitions("-DUSE_MANUAL")
list(APPEND _curl_definitions "USE_MANUAL")
add_custom_command(
OUTPUT "tool_hugehelp.c"
COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > "tool_hugehelp.c"
@ -43,20 +44,13 @@ if(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS)
"${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h"
"${CURL_ASCIIPAGE}"
VERBATIM)
list(APPEND _curl_cfiles_gen "tool_hugehelp.c")
list(APPEND _curl_hfiles_gen "tool_hugehelp.h")
else()
add_custom_command(
OUTPUT "tool_hugehelp.c"
COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_hugehelp.h\"" > "tool_hugehelp.c"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h"
VERBATIM)
list(APPEND _curl_cfiles_gen "tool_hugehelp.c")
list(APPEND _curl_hfiles_gen "tool_hugehelp.h")
endif()
if(CURL_CA_EMBED_SET)
if(PERL_FOUND)
add_definitions("-DCURL_CA_EMBED")
list(APPEND _curl_definitions "CURL_CA_EMBED")
add_custom_command(
OUTPUT "tool_ca_embed.c"
COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" --var curl_ca_embed
@ -93,6 +87,7 @@ add_executable(
${EXE_NAME}
${CURL_CFILES} ${_curl_cfiles_gen} ${CURLX_CFILES} ${CURL_HFILES} ${_curl_hfiles_gen}
)
target_compile_definitions(${EXE_NAME} PRIVATE ${_curl_definitions})
add_executable(
${PROJECT_NAME}::${EXE_NAME}

View File

@ -129,9 +129,11 @@ HUGEIT_0 = @echo " HUGE " $@;
HUGEIT_1 =
HUGEIT_ = $(HUGEIT_0)
curl_CPPFLAGS = $(AM_CPPFLAGS)
if USE_MANUAL
# Here are the stuff to create a built-in manual
AM_CPPFLAGS += -DUSE_MANUAL
curl_CPPFLAGS += -DUSE_MANUAL
$(ASCIIPAGE):
cd $(top_builddir)/docs && $(MAKE)
@ -167,7 +169,7 @@ CA_EMBED_CSOURCE = tool_ca_embed.c
curl_cfiles_gen += $(CA_EMBED_CSOURCE)
CLEANFILES += $(CA_EMBED_CSOURCE)
if CURL_CA_EMBED_SET
AM_CPPFLAGS += -DCURL_CA_EMBED
curl_CPPFLAGS += -DCURL_CA_EMBED
MK_FILE_EMBED = $(top_srcdir)/src/mk-file-embed.pl
$(CA_EMBED_CSOURCE): $(MK_FILE_EMBED) $(CURL_CA_EMBED)
$(PERL) $(MK_FILE_EMBED) --var curl_ca_embed < $(CURL_CA_EMBED) > $(CA_EMBED_CSOURCE)

View File

@ -43,8 +43,8 @@ print <<HEAD
/*
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
*/
#ifdef USE_MANUAL
#include "tool_hugehelp.h"
#ifdef USE_MANUAL
#include "tool_help.h"
HEAD

View File

@ -30,9 +30,7 @@
#include "tool_util.h"
#include "tool_version.h"
#include "tool_cb_prg.h"
#ifndef UNITTESTS
#include "tool_hugehelp.h"
#endif
#include "tool_getparam.h"
#include "terminal.h"
@ -286,7 +284,7 @@ void tool_help(char *category)
msnprintf(cmdbuf, sizeof(cmdbuf), "\n --no-%s", a->lname);
else
msnprintf(cmdbuf, sizeof(cmdbuf), "\n %s", category);
#ifndef UNITTESTS
#ifdef USE_MANUAL
if(a->cmd == C_XATTR)
/* this is the last option, which then ends when FILES starts */
showhelp("\nALL OPTIONS\n", cmdbuf, "\nFILES");

View File

@ -1,39 +0,0 @@
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include "tool_setup.h"
#include "tool_hugehelp.h"
void hugehelp(void)
{
puts("built-in manual was disabled at build-time");
}
void showhelp(const char *trigger, const char *arg, const char *endarg)
{
(void)trigger;
(void)arg;
(void)endarg;
hugehelp();
}

View File

@ -25,13 +25,9 @@
***************************************************************************/
#include "tool_setup.h"
void showhelp(const char *trigger, const char *arg, const char *endarg);
#ifdef USE_MANUAL
void showhelp(const char *trigger, const char *arg, const char *endarg);
void hugehelp(void);
#else
/* do nothing if not there */
#define hugehelp()
#endif
#endif /* HEADER_CURL_TOOL_HUGEHELP_H */

View File

@ -94,9 +94,7 @@
#include "tool_xattr.h"
#include "tool_vms.h"
#include "tool_help.h"
#ifndef UNITTESTS
#include "tool_hugehelp.h"
#endif
#include "tool_progress.h"
#include "tool_ipfs.h"
#include "dynbuf.h"
@ -107,10 +105,6 @@ CURL_EXTERN CURLcode curl_easy_perform_ev(CURL *easy);
#include "memdebug.h" /* keep this as LAST include */
#ifdef UNITTESTS
#undef CURL_CA_EMBED
#endif
#ifdef CURL_CA_EMBED
#ifndef CURL_DECLARED_CURL_CA_EMBED
#define CURL_DECLARED_CURL_CA_EMBED
@ -3191,8 +3185,10 @@ CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
tool_help(global->help_category);
/* Check if we were asked for the manual */
else if(res == PARAM_MANUAL_REQUESTED) {
#ifndef UNITTESTS
#ifdef USE_MANUAL
hugehelp();
#else
puts("built-in manual was disabled at build-time");
#endif
}
/* Check if we were asked for the version information */

View File

@ -566,7 +566,6 @@ if ($configurebuild) {
logit "copying files to build dir ...";
if ($^O eq 'MSWin32') {
system("xcopy /s /q \"$CURLDIR\" .");
system("buildconf.bat");
}
elsif ($^O eq 'linux') {
system("cp -afr $CURLDIR/* .");

View File

@ -61,11 +61,7 @@ CFGSET=true
LIBCURL_OBJS=$(CSOURCES:.c=.obj)
!INCLUDE "../src/Makefile.inc"
# tool_hugehelp has a special rule
CURL_OBJS=$(CURL_CFILES:tool_hugehelp.c=)
CURL_OBJS=$(CURL_OBJS:.c=.obj)
CURL_OBJS=$(CURL_CFILES:.c=.obj)
# backwards compatible check for USE_SSPI

View File

@ -99,6 +99,11 @@ CURL_RESFLAGS = /i../include
LIBCURL_SRC_DIR = ..\lib
CURL_SRC_DIR = ..\src
!IF EXISTS($(CURL_SRC_DIR)\tool_hugehelp.c)
USE_MANUAL = true
CFLAGS = $(CFLAGS) /DUSE_MANUAL
!ENDIF
!IFNDEF WITH_DEVEL
WITH_DEVEL = ../../deps
!ENDIF
@ -684,7 +689,7 @@ CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
!ENDIF
!ENDIF
CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \
CURL_FROM_LIBCURL=\
$(CURL_DIROBJ)\nonblock.obj \
$(CURL_DIROBJ)\strtoofft.obj \
$(CURL_DIROBJ)\warnless.obj \
@ -694,6 +699,10 @@ CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \
$(CURL_DIROBJ)\dynbuf.obj \
$(CURL_DIROBJ)\base64.obj
!IFDEF USE_MANUAL
CURL_FROM_LIBCURL = $(CURL_FROM_LIBCURL) $(CURL_DIROBJ)\tool_hugehelp.obj
!ENDIF
$(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
$(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
$(MANIFESTTOOL)
@ -701,8 +710,10 @@ $(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
{$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj::
$(CURL_CC) $(CURL_CFLAGS) /Fo"$(CURL_DIROBJ)\\" $<
!IFDEF USE_MANUAL
$(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c
$(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c
!ENDIF
$(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c
$(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c