]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
build: Remove bundled getopt_long implementation
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 17 Mar 2024 08:52:50 +0000 (09:52 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 27 Apr 2024 08:14:29 +0000 (10:14 +0200)
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.

LICENSE.adoc
src/ccache/core/mainoptions.cpp
src/third_party/CMakeLists.txt
src/third_party/getopt_long.c [deleted file]
src/third_party/getopt_long.h [deleted file]

index 759848db6edfcc3ca781d99753e1dc9c974b0fe5..da8cfa0c8d92e81a07a0103e89caeac455edb159 100644 (file)
@@ -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
index 7695d7f73865caacddaff03e60d65bacdeba1ceb..28d34e07bf5099e41c399e1c2c41bf0ca2d2d241 100644 (file)
@@ -70,9 +70,7 @@
 #elif defined(_WIN32)
 #  include <win32/getopt.h>
 #else
-extern "C" {
-#  include <getopt_long.h>
-}
+#  error "getopt_long support is missing"
 #endif
 
 namespace fs = util::filesystem;
index d40ffd242837233254e219391f5171600cb4821d..7e14efbe055ed5b9617ca387437662bf89411d20 100644 (file)
@@ -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 (file)
index 3e32193..0000000
+++ /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 <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#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 (file)
index c14b4be..0000000
+++ /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 */