ports/math/plplot/files/patch-git_db396b
Tobias C. Berner 2daa0c1611 Update devel/cmake* to 3.7.1 [1]
Due to an upstream commit [2] we need now to pass
CMAKE_INSTALL_MANDIR:PATH="share/man" in the
devel/llvm-* ports, and fix the plist of net/remmina.
Further add an upstream patch to  math/plplot to
fix the build with 3.7.1.

[1] https://cmake.org/cmake/help/v3.7/release/3.7.html
[2] https://github.com/kitware/cmake/commit/956054

PR:		214975
Approved by:	rakuco (mentor)
Exp-run by:	antoine
2016-12-09 11:40:59 +00:00

119 lines
4.9 KiB
Text

From db396b9fbdc9cd54fb8545ea655185ca73a2a07e Mon Sep 17 00:00:00 2001
From: "Alan W. Irwin" <airwin@users.sourceforge.net>
Date: Sat, 19 Nov 2016 16:04:28 -0800
Subject: [PATCH] Build system: Fix if argument dereferencing issue that occurs
for CMake-3.7.0
My thanks to Tom Schoonjans for reporting this issue.
CMake-3.1 and beyond implements policy CMP0054. The OLD behaviour of
this policy (which we are forced to adopt because we currently support
CMake-3.0.2, ugh) is that quoted strings in if arguments are
dereferenced if there is a variable of the same name that has been
defined.
For example in the following if statement
if(BINDING STREQUAL "c")
CMake looks for a variable called c that has been defined and uses the
value of that variable (which is really a nasty bug in the older
versions of CMake such as 3.0.2 since it is a huge surprise that that
dereferencing occurs instead of just using the string as is for the
comparison). But we are stuck with that bug (because we support 3.0.2
which implies the OLD behaviour of CMP0054).
However, modern versions of CMake such as 3.1.x through 3.7.0 do warn
when this bug shows up. We got no such warning up to 3.6.x, but
evidentally for CMake-3.7.0, the c variable has been set somewhere in
the official CMake code (e.g., in the find modules) so for that versin
we got warnings for the above if statement each time our build system
code executes the function (pkg_config_file) that contains the above
statement, and the result was the above if statement failed when
BINDING derefenced to c, and the pkg-config files that are configured
by that function were screwed up as a result as noticed by Tom
Schoonjans.
I have worked around the problem by replacing the above logic with
if("X${BINDING}X" STREQUAL "XcX")
on the assumption that no CMake variable in our own build system logic
and also the CMake code provided by CMake itself is going to have the name
XcX, but I have also commented the result with "CMP0054" so it will
be easy to find and remove this commit once we no longer have to
support CMake-3.0.2 so that we can use the rational CMP0054 NEW behaviour
which is that quoted strings such as "c" are not dereferenced in "if"
statements!
Meanwhile, we rely on sharp-eyed users like Tom to tell us whenever
there is a message concerning CMP0054 for any CMake version of 3.1 or
higher since that is a signal that in virtually every case our CMake
logic will go wrong (as in this 4.7.0 case) do to this OLD CMP0054
behaviour.
Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
(Debian Jessie) by comparing pkg-config files we configure in
pkgcfg/*.pc with equivalent good *.pc results that were derived with a
previous version of CMake that did not define the "c" variable that
triggered this bug. In all cases for CMake-3.7.0, the file names and
contents of those files are now identical to the good past results.
Also, because of this fix all CMP0054 warnings now no longer occur
with cmake-3.7.0.
---
cmake/modules/pkg-config.cmake | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/cmake/modules/pkg-config.cmake b/cmake/modules/pkg-config.cmake
index 6674efa..05a4a53 100644
--- cmake/modules/pkg-config.cmake
+++ cmake/modules/pkg-config.cmake
@@ -1,6 +1,6 @@
# cmake/modules/pkg-config.cmake
#
-# Copyright (C) 2006-2015 Alan W. Irwin
+# Copyright (C) 2006-2016 Alan W. Irwin
#
# This file is part of PLplot.
#
@@ -415,25 +415,30 @@ function(pkg_config_file BINDING PC_SHORT_NAME PC_LONG_NAME PC_LIBRARY_NAME PC_C
message(FATAL_ERROR "pkg_config_file called with wrong number of arguments")
endif(ARGC EQUAL 7)
- if(BINDING STREQUAL "c")
+ # N.B. all the tests on "X${BINDING}X" below rather than BINDING
+ # are to beat a potential dereferencing problem for strings in if statements.
+ # This problem only occurs with old CMake versions that don't
+ # have CMP0054 set to NEW.
+
+ if("X${BINDING}X" STREQUAL "XcX")
set(PC_FILE_SUFFIX "")
set(PC_REQUIRES "")
- elseif(BINDING STREQUAL "wxwidgets")
+ elseif("X${BINDING}X" STREQUAL "XwxwidgetsX")
set(PC_FILE_SUFFIX "-${BINDING}")
set(PC_REQUIRES "plplot-c++")
- else(BINDING STREQUAL "c")
+ else("X${BINDING}X" STREQUAL "XcX")
set(PC_FILE_SUFFIX "-${BINDING}")
set(PC_REQUIRES "plplot")
- endif(BINDING STREQUAL "c")
+ endif("X${BINDING}X" STREQUAL "XcX")
if(NON_TRANSITIVE)
- if(BINDING STREQUAL "ocaml")
+ if("X${BINDING}X" STREQUAL "XocamlX")
# Don't know how to do non-transitive linking for
# Ocaml binding of PLplot.
set(PC_REQUIRES_TAG "Requires")
- else(BINDING STREQUAL "ocaml")
+ else("X${BINDING}X" STREQUAL "XocamlX")
set(PC_REQUIRES_TAG "Requires.private")
- endif(BINDING STREQUAL "ocaml")
+ endif("X${BINDING}X" STREQUAL "XocamlX")
else(NON_TRANSITIVE)
set(PC_REQUIRES_TAG "Requires")
endif(NON_TRANSITIVE)
--
2.10.1