|
7 | 7 |
|
8 | 8 | let
|
9 | 9 | forceLibgccToBuildCrtStuff = import ./libgcc-buildstuff.nix { inherit lib stdenv; };
|
10 |
| - isCross = ! lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform; |
| 10 | + isCross = !lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform; |
11 | 11 | in
|
12 | 12 |
|
13 | 13 | # We don't support multilib and cross at the same time
|
@@ -266,99 +266,100 @@ originalAttrs:
|
266 | 266 | makeCompatibilitySymlink lib $targetConfig/lib64
|
267 | 267 | '';
|
268 | 268 |
|
269 |
| - postInstall = '' |
270 |
| - # Clean up our compatibility symlinks (see above) |
271 |
| - for link in "''${compatibilitySymlinks[@]}"; do |
272 |
| - echo "Removing compatibility symlink: $link" |
273 |
| - rm -f "$link" |
274 |
| - done |
275 |
| -
|
276 |
| - # Move target runtime libraries to lib output. |
277 |
| - # For non-cross, they're in $out/lib; for cross, they're in $out/$targetConfig/lib. |
278 |
| - targetLibDir="''${targetConfig+$targetConfig/}lib" |
279 |
| -
|
280 |
| - moveToOutput "$targetLibDir/lib*.so*" "''${!outputLib}" |
281 |
| - moveToOutput "$targetLibDir/lib*.dylib" "''${!outputLib}" |
282 |
| - moveToOutput "$targetLibDir/lib*.dll.a" "''${!outputLib}" |
283 |
| - moveToOutput "$targetLibDir/lib*.dll" "''${!outputLib}" |
284 |
| - moveToOutput "share/gcc-*/python" "''${!outputLib}" |
285 |
| -
|
286 |
| - if [ -z "$enableShared" ]; then |
287 |
| - moveToOutput "$targetLibDir/lib*.a" "''${!outputLib}" |
288 |
| - fi |
289 |
| -
|
290 |
| - for i in "''${!outputLib}"/$targetLibDir/*.py; do |
291 |
| - substituteInPlace "$i" --replace "$out" "''${!outputLib}" |
292 |
| - done |
293 |
| -
|
294 |
| - # Multilib and cross can't exist at the same time, so just use lib64 here |
295 |
| - if [ -n "$enableMultilib" ]; then |
296 |
| - moveToOutput "lib64/lib*.so*" "''${!outputLib}" |
297 |
| - moveToOutput "lib64/lib*.dylib" "''${!outputLib}" |
298 |
| - moveToOutput "lib64/lib*.dll.a" "''${!outputLib}" |
299 |
| - moveToOutput "lib64/lib*.dll" "''${!outputLib}" |
300 |
| -
|
301 |
| - for i in "''${!outputLib}"/lib64/*.py; do |
302 |
| - substituteInPlace "$i" --replace "$out" "''${!outputLib}" |
303 |
| - done |
304 |
| - fi |
| 269 | + postInstall = |
| 270 | + '' |
| 271 | + # Clean up our compatibility symlinks (see above) |
| 272 | + for link in "''${compatibilitySymlinks[@]}"; do |
| 273 | + echo "Removing compatibility symlink: $link" |
| 274 | + rm -f "$link" |
| 275 | + done |
| 276 | +
|
| 277 | + # Move target runtime libraries to lib output. |
| 278 | + # For non-cross, they're in $out/lib; for cross, they're in $out/$targetConfig/lib. |
| 279 | + targetLibDir="''${targetConfig+$targetConfig/}lib" |
| 280 | +
|
| 281 | + moveToOutput "$targetLibDir/lib*.so*" "''${!outputLib}" |
| 282 | + moveToOutput "$targetLibDir/lib*.dylib" "''${!outputLib}" |
| 283 | + moveToOutput "$targetLibDir/lib*.dll.a" "''${!outputLib}" |
| 284 | + moveToOutput "$targetLibDir/lib*.dll" "''${!outputLib}" |
| 285 | + moveToOutput "share/gcc-*/python" "''${!outputLib}" |
| 286 | +
|
| 287 | + if [ -z "$enableShared" ]; then |
| 288 | + moveToOutput "$targetLibDir/lib*.a" "''${!outputLib}" |
| 289 | + fi |
305 | 290 |
|
306 |
| - # Remove `fixincl' to prevent a retained dependency on the |
307 |
| - # previous gcc. |
308 |
| - rm -rf $out/libexec/gcc/*/*/install-tools |
309 |
| - rm -rf $out/lib/gcc/*/*/install-tools |
310 |
| -
|
311 |
| - # More dependencies with the previous gcc or some libs (gccbug stores the build command line) |
312 |
| - rm -rf $out/bin/gccbug |
313 |
| -
|
314 |
| - # Remove .la files, they're not adjusted for the makeCompatibilitySymlink magic, |
315 |
| - # which confuses libtool and leads to weird linking errors. |
316 |
| - # Removing the files just makes libtool link .so files directly, which is usually |
317 |
| - # what we want anyway. |
318 |
| - find $out -name '*.la' -delete |
319 |
| -
|
320 |
| - if type "install_name_tool"; then |
321 |
| - for i in "''${!outputLib}"/lib/*.*.dylib "''${!outputLib}"/lib/*.so.[0-9]; do |
322 |
| - install_name_tool -id "$i" "$i" || true |
323 |
| - for old_path in $(otool -L "$i" | grep "$out" | awk '{print $1}'); do |
324 |
| - new_path=`echo "$old_path" | sed "s,$out,''${!outputLib},"` |
325 |
| - install_name_tool -change "$old_path" "$new_path" "$i" || true |
326 |
| - done |
327 |
| - done |
328 |
| - fi |
| 291 | + for i in "''${!outputLib}"/$targetLibDir/*.py; do |
| 292 | + substituteInPlace "$i" --replace "$out" "''${!outputLib}" |
| 293 | + done |
329 | 294 |
|
330 |
| - # Get rid of some "fixed" header files |
331 |
| - rm -rfv $out/lib/gcc/*/*/include-fixed/{root,linux,sys/mount.h,bits/statx.h,pthread.h} |
| 295 | + # Multilib and cross can't exist at the same time, so just use lib64 here |
| 296 | + if [ -n "$enableMultilib" ]; then |
| 297 | + moveToOutput "lib64/lib*.so*" "''${!outputLib}" |
| 298 | + moveToOutput "lib64/lib*.dylib" "''${!outputLib}" |
| 299 | + moveToOutput "lib64/lib*.dll.a" "''${!outputLib}" |
| 300 | + moveToOutput "lib64/lib*.dll" "''${!outputLib}" |
332 | 301 |
|
333 |
| - # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks. |
334 |
| - for i in $out/bin/*-gcc*; do |
335 |
| - if cmp -s $out/bin/gcc $i; then |
336 |
| - ln -sfn gcc $i |
337 |
| - fi |
338 |
| - done |
| 302 | + for i in "''${!outputLib}"/lib64/*.py; do |
| 303 | + substituteInPlace "$i" --replace "$out" "''${!outputLib}" |
| 304 | + done |
| 305 | + fi |
339 | 306 |
|
340 |
| - for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do |
341 |
| - if cmp -s $out/bin/g++ $i; then |
342 |
| - ln -sfn g++ $i |
343 |
| - fi |
344 |
| - done |
| 307 | + # Remove `fixincl' to prevent a retained dependency on the |
| 308 | + # previous gcc. |
| 309 | + rm -rf $out/libexec/gcc/*/*/install-tools |
| 310 | + rm -rf $out/lib/gcc/*/*/install-tools |
| 311 | +
|
| 312 | + # More dependencies with the previous gcc or some libs (gccbug stores the build command line) |
| 313 | + rm -rf $out/bin/gccbug |
| 314 | +
|
| 315 | + # Remove .la files, they're not adjusted for the makeCompatibilitySymlink magic, |
| 316 | + # which confuses libtool and leads to weird linking errors. |
| 317 | + # Removing the files just makes libtool link .so files directly, which is usually |
| 318 | + # what we want anyway. |
| 319 | + find $out -name '*.la' -delete |
| 320 | +
|
| 321 | + if type "install_name_tool"; then |
| 322 | + for i in "''${!outputLib}"/lib/*.*.dylib "''${!outputLib}"/lib/*.so.[0-9]; do |
| 323 | + install_name_tool -id "$i" "$i" || true |
| 324 | + for old_path in $(otool -L "$i" | grep "$out" | awk '{print $1}'); do |
| 325 | + new_path=`echo "$old_path" | sed "s,$out,''${!outputLib},"` |
| 326 | + install_name_tool -change "$old_path" "$new_path" "$i" || true |
| 327 | + done |
| 328 | + done |
| 329 | + fi |
345 | 330 |
|
346 |
| - # Two identical man pages are shipped (moving and compressing is done later) |
347 |
| - for i in "$out"/share/man/man1/*g++.1; do |
348 |
| - if test -e "$i"; then |
349 |
| - man_prefix=`echo "$i" | sed "s,.*/\(.*\)g++.1,\1,"` |
350 |
| - ln -sf "$man_prefix"gcc.1 "$i" |
351 |
| - fi |
352 |
| - done |
353 |
| - '' |
354 |
| - # if cross-compiling, link from $lib/lib to $lib/${targetConfig}. |
355 |
| - # since native-compiles have $lib/lib as a directory (not a |
356 |
| - # symlink), this ensures that in every case we can assume that |
357 |
| - # $lib/lib contains the .so files |
358 |
| - + lib.optionalString isCross '' |
359 |
| - if [ -e "$lib/$targetConfig/lib" ]; then |
360 |
| - ln -s "$lib/$targetConfig/lib" "$lib/lib" |
361 |
| - fi |
362 |
| - ''; |
| 331 | + # Get rid of some "fixed" header files |
| 332 | + rm -rfv $out/lib/gcc/*/*/include-fixed/{root,linux,sys/mount.h,bits/statx.h,pthread.h} |
| 333 | +
|
| 334 | + # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks. |
| 335 | + for i in $out/bin/*-gcc*; do |
| 336 | + if cmp -s $out/bin/gcc $i; then |
| 337 | + ln -sfn gcc $i |
| 338 | + fi |
| 339 | + done |
| 340 | +
|
| 341 | + for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do |
| 342 | + if cmp -s $out/bin/g++ $i; then |
| 343 | + ln -sfn g++ $i |
| 344 | + fi |
| 345 | + done |
| 346 | +
|
| 347 | + # Two identical man pages are shipped (moving and compressing is done later) |
| 348 | + for i in "$out"/share/man/man1/*g++.1; do |
| 349 | + if test -e "$i"; then |
| 350 | + man_prefix=`echo "$i" | sed "s,.*/\(.*\)g++.1,\1,"` |
| 351 | + ln -sf "$man_prefix"gcc.1 "$i" |
| 352 | + fi |
| 353 | + done |
| 354 | + '' |
| 355 | + # if cross-compiling, link from $lib/lib to $lib/${targetConfig}. |
| 356 | + # since native-compiles have $lib/lib as a directory (not a |
| 357 | + # symlink), this ensures that in every case we can assume that |
| 358 | + # $lib/lib contains the .so files |
| 359 | + + lib.optionalString isCross '' |
| 360 | + if [ -e "$lib/$targetConfig/lib" ]; then |
| 361 | + ln -s "$lib/$targetConfig/lib" "$lib/lib" |
| 362 | + fi |
| 363 | + ''; |
363 | 364 | }
|
364 | 365 | ))
|
0 commit comments