From: Joel Rosdahl Date: Sun, 17 Mar 2024 08:52:50 +0000 (+0100) Subject: build: Remove bundled getopt_long implementation X-Git-Tag: v4.10~42^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09f58c03073e824cced63843e348c29d43d26c44;p=thirdparty%2Fccache.git build: Remove bundled getopt_long implementation It seems likely that getopt_long is available on all platforms where ccache is built nowadays, except Windows. Therefore, remove the bundled getopt_long implementation for now. If it turns out that somebody wants to compile ccache on a system that lacks getopt_long we can add support specifying a system or downloaded version. --- diff --git a/LICENSE.adoc b/LICENSE.adoc index 759848db..da8cfa0c 100644 --- a/LICENSE.adoc +++ b/LICENSE.adoc @@ -387,44 +387,6 @@ express Statement of Purpose. ---- -=== src/third_party/getopt_long.* - -This implementation of `getopt_long()` was copied from -https://www.postgresql.org[PostgreSQL] and has the following license text: - ----- -Portions Copyright (c) 1987, 1993, 1994 -The Regents of the University of California. All rights reserved. - -Portions Copyright (c) 2003 -PostgreSQL Global Development Group - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. ----- - - === src/third_party/httplib.* cpp-httplib - A C++11 cross-platform HTTP/HTTPS library. Copied from cpp-httplib diff --git a/src/ccache/core/mainoptions.cpp b/src/ccache/core/mainoptions.cpp index 7695d7f7..28d34e07 100644 --- a/src/ccache/core/mainoptions.cpp +++ b/src/ccache/core/mainoptions.cpp @@ -70,9 +70,7 @@ #elif defined(_WIN32) # include #else -extern "C" { -# include -} +# error "getopt_long support is missing" #endif namespace fs = util::filesystem; diff --git a/src/third_party/CMakeLists.txt b/src/third_party/CMakeLists.txt index d40ffd24..7e14efbe 100644 --- a/src/third_party/CMakeLists.txt +++ b/src/third_party/CMakeLists.txt @@ -1,9 +1,7 @@ add_library(third_party STATIC httplib.cpp url.cpp xxhash.c) target_include_directories(third_party INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) -if(NOT MSVC) - target_sources(third_party PRIVATE getopt_long.c) -else() +if(MSVC) target_sources(third_party PRIVATE win32/getopt.c) target_compile_definitions(third_party PUBLIC -DSTATIC_GETOPT) endif() diff --git a/src/third_party/getopt_long.c b/src/third_party/getopt_long.c deleted file mode 100644 index 3e321930..00000000 --- a/src/third_party/getopt_long.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * getopt_long() -- long options parser - * - * Portions Copyright (c) 1987, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Portions Copyright (c) 2003 - * PostgreSQL Global Development Group - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "config.h" - -#ifdef HAVE_GETOPT_LONG - -typedef int do_not_warn_about_empty_compilation_unit; - -#else - -#include "getopt_long.h" - -#include -#include -#include - -#define BADCH '?' -#define BADARG ':' -#define EMSG "" - -int -getopt_long(int argc, char *const argv[], - const char *optstring, - const struct option * longopts, int *longindex) -{ - static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ - - if (!*place) - { /* update scanning pointer */ - if (optind >= argc) - { - place = EMSG; - return -1; - } - - place = argv[optind]; - - if (place[0] != '-') - { - place = EMSG; - return -1; - } - - place++; - - if (place[0] == '-' && place[1] == '\0') - { /* found "--" */ - ++optind; - place = EMSG; - return -1; - } - - if (place[0] == '-' && place[1]) - { - /* long option */ - size_t namelen; - int i; - - place++; - - namelen = strcspn(place, "="); - for (i = 0; longopts[i].name != NULL; i++) - { - if (strlen(longopts[i].name) == namelen - && strncmp(place, longopts[i].name, namelen) == 0) - { - if (longopts[i].has_arg) - { - if (place[namelen] == '=') - optarg = place + namelen + 1; - else if (optind < argc - 1) - { - optind++; - optarg = argv[optind]; - } - else - { - if (optstring[0] == ':') - return BADARG; - if (opterr) - fprintf(stderr, - "%s: option requires an argument -- %s\n", - argv[0], place); - place = EMSG; - optind++; - return BADCH; - } - } - else - { - optarg = NULL; - if (place[namelen] != 0) - { - /* XXX error? */ - } - } - - optind++; - - if (longindex) - *longindex = i; - - place = EMSG; - - if (longopts[i].flag == NULL) - return longopts[i].val; - else - { - *longopts[i].flag = longopts[i].val; - return 0; - } - } - } - - if (opterr && optstring[0] != ':') - fprintf(stderr, - "%s: illegal option -- %s\n", argv[0], place); - place = EMSG; - optind++; - return BADCH; - } - } - - /* short option */ - optopt = (int) *place++; - - oli = strchr(optstring, optopt); - if (!oli) - { - if (!*place) - ++optind; - if (opterr && *optstring != ':') - fprintf(stderr, - "%s: illegal option -- %c\n", argv[0], optopt); - return BADCH; - } - - if (oli[1] != ':') - { /* don't need argument */ - optarg = NULL; - if (!*place) - ++optind; - } - else - { /* need an argument */ - if (*place) /* no white space */ - optarg = place; - else if (argc <= ++optind) - { /* no arg */ - place = EMSG; - if (*optstring == ':') - return BADARG; - if (opterr) - fprintf(stderr, - "%s: option requires an argument -- %c\n", - argv[0], optopt); - return BADCH; - } - else - /* white space */ - optarg = argv[optind]; - place = EMSG; - ++optind; - } - return optopt; -} - -#endif /* HAVE_GETOPT_LONG */ diff --git a/src/third_party/getopt_long.h b/src/third_party/getopt_long.h deleted file mode 100644 index c14b4be7..00000000 --- a/src/third_party/getopt_long.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Portions Copyright (c) 1987, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Portions Copyright (c) 2003-2010, PostgreSQL Global Development Group - */ -#ifndef GETOPT_LONG_H -#define GETOPT_LONG_H - -extern int opterr; -extern int optind; -extern int optopt; -extern char *optarg; - -struct option -{ - const char *name; - int has_arg; - int *flag; - int val; -}; - -#define no_argument 0 -#define required_argument 1 - -extern int getopt_long(int argc, char *const argv[], - const char *optstring, - const struct option * longopts, int *longindex); - -#endif /* GETOPT_LONG_H */