A new port wants to fetch from the internet at build time:

>      file( DOWNLOAD ${CONFIG_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.json )

No problem, I fetch the file via DISTFILES.

Now I'd like to pass in the fetched file via the same variable,
without patching, like so:

        CONFIGURE_ARGS += `-DCONFIG_URL=file://${DISTDIR}/config.json`

but using an offline file:// URL pointing at an absoloute path does not
work here since out cmake cmake denies `file(DOWNLOAD, ...) completely.

So now I have to patch the sources and add yet another hack, e.g.

->      file( DOWNLOAD ${CONFIG_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.json )
+>      configure_file(${CONFIG_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.json 
COPYONLY )


This is more annoying than it could be, imho.

Would it be sensible to allow DOWNLOAD'ing absoloute file:// URLs?
Then no patching would be required.
I have to patch four times in total now, in two new ports.

I just gave this a shot and made cmake only bail out if the URL does not
begin with "file:///" (three slashes).


Feedback? Objection? OK?

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/cmake/Makefile,v
retrieving revision 1.207
diff -u -p -r1.207 Makefile
--- Makefile    26 Mar 2022 08:14:00 -0000      1.207
+++ Makefile    22 May 2022 03:15:07 -0000
@@ -6,7 +6,7 @@ VER =           3.20.3
 EPOCH =                0
 DISTNAME =     cmake-${VER}
 CATEGORIES =   devel
-REVISION =     6
+REVISION =     7
 
 HOMEPAGE =     https://www.cmake.org/
 
Index: patches/patch-Source_cmFileCommand_cxx
===================================================================
RCS file: /cvs/ports/devel/cmake/patches/patch-Source_cmFileCommand_cxx,v
retrieving revision 1.6
diff -u -p -r1.6 patch-Source_cmFileCommand_cxx
--- patches/patch-Source_cmFileCommand_cxx      11 Mar 2022 18:49:50 -0000      
1.6
+++ patches/patch-Source_cmFileCommand_cxx      22 May 2022 04:28:41 -0000
@@ -1,19 +1,19 @@
 Index: Source/cmFileCommand.cxx
 --- Source/cmFileCommand.cxx.orig
 +++ Source/cmFileCommand.cxx
-@@ -1599,6 +1599,12 @@ bool HandleDownloadCommand(std::vector<std::string> co
-                            cmExecutionStatus& status)
- {
- #if !defined(CMAKE_BOOTSTRAP)
+@@ -1609,6 +1609,12 @@ bool HandleDownloadCommand(std::vector<std::string> co
+   ++i;
+   std::string file;
+ 
 +  std::string openbsd_build;
 +  if ((cmSystemTools::GetEnv("MODCMAKE_PORT_BUILD", openbsd_build) &&
-+     openbsd_build == std::string("yes"))) {
++     openbsd_build == std::string("yes")) && !cmHasPrefix(url, "file:///")) {
 +    status.SetError("DOWNLOAD not supported in OpenBSD ports builds.");
 +    return false;
 +  }
-   auto i = args.begin();
-   if (args.size() < 2) {
-     status.SetError("DOWNLOAD must be called with at least two arguments.");
+   long timeout = 0;
+   long inactivity_timeout = 0;
+   std::string logVar;
 @@ -1985,6 +1991,12 @@ bool HandleUploadCommand(std::vector<std::string> cons
                           cmExecutionStatus& status)
  {

Reply via email to