Skip to content

Commit 37e2399

Browse files
committed
fix: address PR review comments
- rts/configure.ac: Use portable ${MKDIR_P} instead of mkdir -p (AC_PROG_MKDIR_P macro for better portability across systems) - Makefile: Replace for loops with find -exec for creating symlinks (cleaner and avoids issues with special characters in filenames) - Makefile: Add explanatory comments for symlink creation (explains why RTS sublibraries need top-level symlinks)
1 parent 59545d4 commit 37e2399

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

Makefile

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -956,12 +956,14 @@ _build/bindist: stage2 driver/ghc-usage.txt driver/ghci-usage.txt
956956
$@/bin/ghc-pkg$(EXE_EXT) recache
957957
# Copy headers
958958
@$(call copy_all_stage2_h,$@/bin/ghc-pkg$(EXE_EXT))
959-
# Add basename symlinks for nested shared libs (.dylib, .so) in lib/$(HOST_PLATFORM)
959+
# Add basename symlinks for nested shared libs (.dylib, .so) in
960+
# lib/$(HOST_PLATFORM). Shared libraries may be installed in subdirectories
961+
# (e.g., lib/x86_64-linux/rts-1.0.3/). We create symlinks at the top level
962+
# so all shared libraries are in one folder.
960963
@if [ -d "$@/lib/$(HOST_PLATFORM)" ]; then \
961-
cd "$@/lib/$(HOST_PLATFORM)" ; \
962-
for lib in $$(find . -mindepth 2 \( -name "*.dylib" -o -name "*.so" \) -type f) ; do \
963-
ln -sf "$$lib" "$$(basename "$$lib")" ; \
964-
done ; \
964+
cd "$@/lib/$(HOST_PLATFORM)" && \
965+
find . -mindepth 2 \( -name "*.dylib" -o -name "*.so" \) -type f \
966+
-exec sh -c 'ln -sf "$$1" "$$(basename "$$1")"' _ {} \; ; \
965967
fi
966968
# Create -dyn iserv executable (symlink so ghc can find ghc-iserv-dyn)
967969
@ln -sf ghc-iserv$(EXE_EXT) "$@/bin/ghc-iserv-dyn$(EXE_EXT)"
@@ -989,12 +991,12 @@ _build/bindist/lib/targets/%: _build/bindist driver/ghc-usage.txt driver/ghci-us
989991
# Copy libraries and settings
990992
@if [ -e $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F) ] ; then find $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F)/ -mindepth 1 -type f -name "*.so" -execdir mv '{}' $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F)/'{}' \; ; fi
991993
$(call copycrosslib,$(@F))
992-
# Add basename symlinks for nested shared libs (.dylib, .so) in lib/$(@F)
994+
# Add basename symlinks for nested shared libs (.dylib, .so) in lib/$(@F).
995+
# See comment in _build/bindist target for explanation.
993996
@if [ -d $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F) ] ; then \
994-
cd $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F) ; \
995-
for lib in $$(find . -mindepth 2 \( -name "*.dylib" -o -name "*.so" \) -type f) ; do \
996-
ln -sf "$$lib" "$$(basename "$$lib")" ; \
997-
done ; \
997+
cd $(CURDIR)/_build/bindist/lib/targets/$(@F)/lib/$(@F) && \
998+
find . -mindepth 2 \( -name "*.dylib" -o -name "*.so" \) -type f \
999+
-exec sh -c 'ln -sf "$$1" "$$(basename "$$1")"' _ {} \; ; \
9981000
fi
9991001
# --help
10001002
@cp -rfp driver/ghc-usage.txt _build/bindist/lib/targets/$(@F)/lib/

rts/configure.ac

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
5757
dnl later CC is copied to CC_STAGE{1,2,3}
5858
AC_PROG_CC([cc gcc clang])
5959

60+
dnl Portable mkdir -p (sets MKDIR_P)
61+
AC_PROG_MKDIR_P
62+
6063
dnl make extensions visible to allow feature-tests to detect them lateron
6164
AC_USE_SYSTEM_EXTENSIONS
6265

@@ -444,7 +447,7 @@ dnl Generate ghcplatform.h
444447
dnl ######################################################################
445448

446449
[
447-
mkdir -p include
450+
${MKDIR_P} include
448451
449452
touch include/ghcplatform.h
450453
> include/ghcplatform.h
@@ -537,47 +540,47 @@ else
537540
fi
538541

539542
AC_MSG_CHECKING([for include/rts/AutoApply.cmm.h])
540-
if mkdir -p include/rts && $GENAPPLY include/DerivedConstants.h > include/rts/AutoApply.cmm.h; then
543+
if ${MKDIR_P} include/rts && $GENAPPLY include/DerivedConstants.h > include/rts/AutoApply.cmm.h; then
541544
AC_MSG_RESULT([created])
542545
else
543546
AC_MSG_RESULT([failed to create])
544547
AC_MSG_ERROR([Failed to run $GENAPPLY include/DerivedConstants.h > include/rts/AutoApply.cmm.h])
545548
fi
546549

547550
AC_MSG_CHECKING([for include/rts/AutoApply_V16.cmm.h])
548-
if mkdir -p include/rts && $GENAPPLY include/DerivedConstants.h -V16 > include/rts/AutoApply_V16.cmm.h; then
551+
if ${MKDIR_P} include/rts && $GENAPPLY include/DerivedConstants.h -V16 > include/rts/AutoApply_V16.cmm.h; then
549552
AC_MSG_RESULT([created])
550553
else
551554
AC_MSG_RESULT([failed to create])
552555
AC_MSG_ERROR([Failed to run $GENAPPLY include/DerivedConstants.h -V16 > include/rts/AutoApply_V16.cmm.h])
553556
fi
554557

555558
AC_MSG_CHECKING([for include/rts/AutoApply_V32.cmm.h])
556-
if mkdir -p include/rts && $GENAPPLY include/DerivedConstants.h -V32 > include/rts/AutoApply_V32.cmm.h; then
559+
if ${MKDIR_P} include/rts && $GENAPPLY include/DerivedConstants.h -V32 > include/rts/AutoApply_V32.cmm.h; then
557560
AC_MSG_RESULT([created])
558561
else
559562
AC_MSG_RESULT([failed to create])
560563
AC_MSG_ERROR([Failed to run $GENAPPLY include/DerivedConstants.h -V32 > include/rts/AutoApply_V32.cmm.h])
561564
fi
562565

563566
AC_MSG_CHECKING([for include/rts/AutoApply_V64.cmm.h])
564-
if mkdir -p include/rts && $GENAPPLY include/DerivedConstants.h -V64 > include/rts/AutoApply_V64.cmm.h; then
567+
if ${MKDIR_P} include/rts && $GENAPPLY include/DerivedConstants.h -V64 > include/rts/AutoApply_V64.cmm.h; then
565568
AC_MSG_RESULT([created])
566569
else
567570
AC_MSG_RESULT([failed to create])
568571
AC_MSG_ERROR([Failed to run $GENAPPLY include/DerivedConstants.h -V64 > include/rts/AutoApply_V64.cmm.h])
569572
fi
570573

571574
AC_MSG_CHECKING([for include/rts/EventLogConstants.h])
572-
if mkdir -p include/rts && $PYTHON $srcdir/gen_event_types.py --event-types-defines include/rts/EventLogConstants.h; then
575+
if ${MKDIR_P} include/rts && $PYTHON $srcdir/gen_event_types.py --event-types-defines include/rts/EventLogConstants.h; then
573576
AC_MSG_RESULT([created])
574577
else
575578
AC_MSG_RESULT([failed to create])
576579
AC_MSG_ERROR([Failed to run $PYTHON gen_event_types.py])
577580
fi
578581

579582
AC_MSG_CHECKING([for include/rts/EventTypes.h])
580-
if mkdir -p include/rts && $PYTHON $srcdir/gen_event_types.py --event-types-array include/rts/EventTypes.h; then
583+
if ${MKDIR_P} include/rts && $PYTHON $srcdir/gen_event_types.py --event-types-array include/rts/EventTypes.h; then
581584
AC_MSG_RESULT([created])
582585
else
583586
AC_MSG_RESULT([failed to create])

0 commit comments

Comments
 (0)