For example, you can now say:
  configureFlags = "--prefix=${placeholder "out"} --includedir=${placeholder "dev"}";
The strings returned by the ‘placeholder’ builtin are replaced at
build time by the actual store paths corresponding to the specified
outputs.
Previously, you had to work around the inability to self-reference by doing stuff like:
  preConfigure = ''
    configureFlags+=" --prefix $out --includedir=$dev"
  '';
or rely on ad-hoc variable interpolation semantics in Autoconf or Make
(e.g. --prefix=\$(out)), which doesn't always work.
		
	
			
		
			
				
	
	
		
			22 lines
		
	
	
	
		
			425 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
	
		
			425 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
| source common.sh
 | |
| 
 | |
| clearStore
 | |
| 
 | |
| nix-build --no-out-link -E '
 | |
|   with import ./config.nix;
 | |
| 
 | |
|   mkDerivation {
 | |
|     name = "placeholders";
 | |
|     outputs = [ "out" "bin" "dev" ];
 | |
|     buildCommand = "
 | |
|       echo foo1 > $out
 | |
|       echo foo2 > $bin
 | |
|       echo foo3 > $dev
 | |
|       [[ $(cat ${placeholder "out"}) = foo1 ]]
 | |
|       [[ $(cat ${placeholder "bin"}) = foo2 ]]
 | |
|       [[ $(cat ${placeholder "dev"}) = foo3 ]]
 | |
|     ";
 | |
|   }
 | |
| '
 | |
| 
 | |
| echo XYZZY
 |