Commit Graph

69 Commits

Author SHA1 Message Date
Alyssa Ross
cec26d6391
cmake: fix grep in setupHook
This produced a warning:

> grep: Invalid range end

In a [], - has to come last.

Reported-by: Daniël de Kok <me@danieldk.eu>
Fixes: 75fdc1ced6
2020-08-08 15:12:12 +00:00
Jan Tojnar
75fdc1ced6
cmake.setupHook: define shareDocName
The docdir flag needs to include `PROJECT_NAME` according to [GNU guidelines]. We are passing
`-DCMAKE_INSTALL_DOCDIR=${!outputDoc}/share/doc/${shareDocName}` but `$shareDocName` was unset.

The `multiple-outputs.sh` setup hook actually only defines `shareDocName` as a local variable
so it was not available for cmake setup hook. Making it global would be of limited usability,
since it primarily tries to extract the project name from configure script.
Additionally, it would not be set because the setup hook defines `setOutputFlags=`,
preventing the function defining `shareDocName` from running. And lastly, the function
would not run for single-output derivations.

Previously, we tried [not disabling `setOutputFlags`] and passing the directory flags
only for multi-output derivations that do not disable `setOutputFlags` but that meant having
two different branches of code, making it harder to check correctness. The multi-output
one did in fact not work due to aforementioned undefined `shareDocName`. It also broke
derivations that set `setOutputFlags=` like [`qtModule` function does] (probably
because some Qt modules have configure scripts incompatible with `configureFlags` defined
by `multiple-outputs.sh` setup hook). For that reason, it was [reverted], putting us back to start.

Let’s try to extract the project name from CMake in the cmake setup hook.

CMake has a `-L` flag for dumping variables but `PROJECT_NAME` did not seem to be among them
when I tested, so I had to resort to parsing the `CMakeLists.txt` file.

The extraction function is limited, it does not deal with

* project name on different line from the `project(` command opening
    - that will just not get matched so we will fall back to
      using the derivation name
* variable interpolation
    - we will just fall back to using derivation name when the extracted
      `project_name` contains a dollar character
* multiple [`project`] commands
    - The command sets `PROJECT_NAME` variable anew with each call, so the
      last `project` call before `include(GNUInstallDirs)` command will be used
      when the included module would [cache the `CMAKE_INSTALL_DOCDIR` variable].
      We will just take the first discovered `project` command for simplicity.
      Hopefully, there are not many projects that use multiple `project` calls
      before including `GNUInstallDirs`.

In either case, we will have some subdirectory so the conflicts will be minimized.

[GNU guidelines]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#index-docdir
[not disabling `setOutputFlags`]: be1b22538a
[`qtModule` function  does]: https://github.com/NixOS/nixpkgs/pull/12740
[reverted]: https://github.com/NixOS/nixpkgs/pull/92298
[`PROJECT_NAME`]: https://cmake.org/cmake/help/v3.18/variable/PROJECT_NAME.html
[`project`]: https://cmake.org/cmake/help/v3.18/command/project.html
[cache the `CMAKE_INSTALL_DOCDIR` variable]: 92e30d576d/Modules/GNUInstallDirs.cmake (L298-L299)
2020-07-16 04:38:07 +02:00
Jan Tojnar
cfe7e12d38
Revert "cmake: only set output paths with multiple outputs"
This reverts commit be1b22538a.

The commit broke Qt modules using CMake because they disable setOutputFlags.

There is no need to have these flags limited to multiple output derivations since it
should just work. If it does not, it is a bug that should be fixed as per
https://github.com/jtojnar/cmake-snips#assuming-cmake_install_dir-is-relative-path
Likewise, having a variable to disable passing the flags is also unnecessary,
since CMake, unlike some configure scripts, ignores unknown flags. And if a person
does not like the values, they can just override them by passing the offending
flag with a different value to cmakeFlags.
2020-07-05 19:01:53 +02:00
Alyssa Ross
be1b22538a cmake: only set output paths with multiple outputs
This brings cmake inline with the behaviour used for configure
scripts, defined in multiple-outputs.sh.  It's important because
that setup hook will only set shareDocName if multiple outputs are in
use (and setOutputFlags hasn't been disabled).  So previously,
CMAKE_INSTALL_DOCDIR would be set to $out/share/doc for single-output
derivations, instead of $out/share/doc/$shareDocName, which would
result in collisions.

Since this hook now uses the setOutputFlags variable, I had to remove
the empty assignment of it added in
a714284d8b.

Fixes: https://github.com/NixOS/nixpkgs/issues/82304
2020-06-29 13:56:27 +00:00
Daiderd Jordan
68513e4071
cmake: move CMAKE_OSX_ARCHITECTURES out of the stdenv
This was initially introduced in 92188d9d17,
not clear how relevant this still is but i686 isn't supported anymore so
disable it explicitly.
2020-01-31 21:52:13 +01:00
Daiderd Jordan
b984c227d2
cmake: remove CMAKE_OSX_DEPLOYMENT_TARGET overrides
We _do_ want minimum versions in our packages.
2020-01-31 21:52:12 +01:00
Tobias Mayer
dfee92cd2e cmake: 3.15.4 -> 3.16.2 2019-12-20 15:59:32 +01:00
John Ericson
42ffaf5290 cmake: NIX_CFLAGS_COMPILE NIX_LDFLAG could be undefined 2019-11-08 13:24:20 -05:00
John Ericson
cdbbaa91ed cmake: CMAKE_*_PATH can be undefined 2019-11-05 14:21:27 -05:00
John Ericson
b7f4bda282 treewide: *Phase(s)? variables are optional
If these aren't defined, the stdenv defaults are used in the `*Phase`
case, or no extra phases are done, in the `*Phases` case.
2019-11-01 14:44:44 -04:00
John Ericson
1290e532ea treewide: Make more dont* variables OK to be undefined in setup hooks 2019-11-01 14:44:44 -04:00
Dmitry Kalinkin
c8041d97a5
cmake: process -iframework in setup-hook
This fixes a regression in #26197

Fixes: f496357585 ('cc-wrapper: use -iframework instead of -F')
2019-10-11 18:48:16 -04:00
worldofpeace
883a1dffcf
Merge pull request #52859 from jtojnar/cmake-gid
cmake: use multiple outputs for GNUInstallDirs
2019-07-25 16:05:10 -04:00
Matthew Bauer
91f0c848f4 cmake: set BUILD_TESTING=OFF when doCheck is false
This means we can avoid building test suites that will never be run.
2019-03-09 14:32:55 -05:00
Florian Franzen
e0e4577c0f cmake: disable package registry 2019-01-31 10:17:55 +01:00
Jan Tojnar
c0d2f92459
cmake: use multiple outputs for GNUInstallDirs
CMake contains a module for more granular installation directories:

https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html

Let’s set the paths so that projects using the module can be more
easily split into multiple outputs.
2018-12-25 20:51:31 +01:00
Matthew Bauer
70e2b0bef0 cmake: also set CTEST_PARALLEL_LEVEL 2018-11-19 18:14:44 -06:00
Matthew Bauer
285eb9a894 cmake: set CTEST_OUTPUT_ON_FAILURE globally
We should always use this.
2018-11-19 16:16:16 -06:00
Matthieu Coudron
a6809c0dd0 cmake: don't override cmakeDir when set (#40687)
When dontUseCmakeBuildDir is true (aka the default), it overrides
cmakeDir regardless of the package configuration.

While packaging netbee, I needed to both keep dontUseCmakeBuildDir to
true (some hardcoded paths expect the build folder) and set cmakeDir
(since CMakeList.txt was in a subfolder) which proved impossible.
Here is the fix.
2018-06-03 12:28:28 +00:00
John Ericson
ce018be2d6
Merge pull request #40566 from obsidiansystems/strictDeps-for-18.03
cmake: Fix build and setup hook
2018-05-15 16:31:17 -04:00
John Ericson
0ff650a392 cmake: Fix build and setup hook
I screwed this up in 330ca731e8. I'm
sorry.
2018-05-15 15:24:22 -04:00
John Ericson
5e17335bd7 Merge remote-tracking branch 'upstream/staging' into strictDeps 2018-05-14 23:33:03 -04:00
John Ericson
330ca731e8 treewide: Get rid of all uses of crossConfig
The hack of using `crossConfig` to enforce stricter handling of
dependencies is replaced with a dedicated `strictDeps` for that purpose.
(Experience has shown that my punning was a terrible idea that made more
difficult and embarrising to teach teach.)

Now that is is clear, a few packages now use `strictDeps`, to fix
various bugs:

 - bintools-wrapper and cc-wrapper
2018-05-14 23:30:37 -04:00
Matthew Bauer
bd9b17f762 cmake: correctly detect clang compiler on macOS 2018-03-14 14:36:27 -05:00
Matthew Bauer
8beb809fd1 cmake: don't detect macOS deployment target 2018-03-14 14:31:53 -05:00
Matthew Bauer
acbf439fef cmake: disable detecting global macOS sdk 2018-03-14 14:30:10 -05:00
Matthew Bauer
b99cae3931 cmake: set CMAKE_FIND_FRAMEWORK=last 2018-03-14 14:20:07 -05:00
Will Dietz
e25a343716 cmake: don't force gcc, use more general cc/c++ 2018-02-13 12:39:34 -06:00
Will Dietz
37c2ac90e6 cmake: fix cross
TODO: toolchain file instead?
2018-02-13 09:44:29 -06:00
Daiderd Jordan
6f10cfc777
cmake: fix INSTALL_NAME_DIR for darwin libraries
When there's a lib output libraries won't be intalled to $prefix causing
output cycles.
2018-01-07 09:45:25 +01:00
John Ericson
046f091e0d treewide: Don't use envHook anymore
This commits needs a MAJOR audit as I oftentimes just guessed which of
`$hostOffset`, `$targetOffset`, or a fixed offset should be used.
2017-12-30 22:04:22 -05:00
Orivej Desh
031138b7f0 cmake: enable parallel building of cmake projects by default 2017-12-07 08:52:42 +00:00
Orivej Desh
da516f0404 cmake: generate for Ninja when the build phase is Ninja
This is overridable by providing a custom build phase or setting
dontUseNinjaBuild = true.
2017-12-07 08:52:42 +00:00
Matthew Bauer
24eb665695 cmake: setup CMAKE_FRAMEWORK_PATH
This tells cmake how to find macOS frameworks.

Fixes #26197
2017-10-21 02:27:09 -05:00
Linus Heckemann
28154f45a6 cmake setup hook: allow other build types 2017-05-10 14:33:20 +01:00
Michael Raskin
dabf09aa92 cmake: update setup-hook to take -isystem instead of -I into account 2016-09-08 09:10:00 +02:00
Thomas Tuegel
491f7f017c cmake: set LIBDIR and INCLUDEDIR for multiple outputs 2016-04-20 10:01:06 -05:00
Thomas Tuegel
a714284d8b cmake: don't set incompatible flags for multiple outputs 2016-01-31 21:15:03 -06:00
Thomas Tuegel
1087020a46 cmake: invoke configure hooks correctly
Otherwise, the multiple-outputs hooks will not fire correctly.
2016-01-31 21:15:03 -06:00
Luis G. Torres
ff35c4a5e2 Make cmake install libraries with full install names by default so that executables can find cmake-installed shared libraries at runtime on Darwin. Addresses #6821. 2015-03-30 21:25:44 -04:00
Eelco Dolstra
0acc4e6b26 cmake: Fix setup hook on bash < 4.0
This matters in nix-shell and stdenvNative on Darwin.

Fixes #3204.
2014-08-09 23:14:01 +02:00
Vladimír Čunát
3314be6b73 cmake: consistent names, to satisfy comments on #567 2013-06-27 16:33:24 +02:00
Vladimír Čunát
7f1e09c35d Re-Revert "Merge pull request #567 from MarcWeber/submit/cmake-improvement"
This reverts commit b08e12b37a.
2013-06-27 15:14:32 +02:00
Peter Simons
b08e12b37a Revert "Merge pull request #567 from MarcWeber/submit/cmake-improvement"
This reverts commit abc7591aaf, reversing changes
made to 6b1ebeccf2, because they broke half the
packages in stdenv-updates: http://hydra.nixos.org/eval/927013 has further
details.
2013-06-17 10:19:15 +02:00
Marc Weber
f7ef08e5cd experimental/cmake-improvement
set CMAKE_LIBRARY_PATH, CMAKE_INCLUDE_PATH based on NIX_CFLAGS_COMPILE and
NIX_LDFLAGS so that cmake's find_library like functions find all the libraries
gcc knows about thanks to the gcc wrapper

This is particular useful with myEnvFun which then also sets those CMAKE_* env
variables.`

Because setup.sh has to change this causes many rebuilds - thus it should be
included in a stdenv-update like branch

Also cmake builds in parallel perfectly fine

update cmake to latest minor number, I didn't change the patches,
just reapplied them manually recordin a new patch
2013-05-28 16:22:45 +02:00
Lluís Batlle i Rossell
183b37645b cmake setup-hook: fixing cmakeFlagsArray
The array wasn'te expanded properly, the spaces weren't preserved.
2013-03-12 11:31:58 +01:00
Shea Levy
45f6008817 cmake setup hook: If configurePhase is set, don't override it 2013-02-07 14:03:23 -05:00
Lluís Batlle i Rossell
183d05a0d7 Setting the cmake build type Release in its setup-hook, for all cmake
projects to be built in Release by default.

Some packages were not getting optimisation flags, like rigsofrods.


svn path=/nixpkgs/branches/stdenv-updates/; revision=32574
2012-02-26 11:27:45 +00:00
Eelco Dolstra
1e886749b5 * Don't replace /opt if it's followed by something other than
whitespace or a /, otherwise strings such as /foo/opticaldrive.c
  will be broken.

svn path=/nixpkgs/branches/stdenv-updates/; revision=31793
2012-01-23 13:16:51 +00:00
Eelco Dolstra
28780d27d1 * cmake: don't use replace-literal.
svn path=/nixpkgs/branches/stdenv-updates/; revision=31736
2012-01-20 15:10:28 +00:00