@@ -111,6 +111,11 @@ endef
111
111
COMMA: =,
112
112
SPACE: =$(eval ) $(eval )
113
113
114
+ # define various helper macros for safe interpolation into various parsers
115
+ shell_escape ='$(subst ','\'',$1) '
116
+ c_escape ="$(subst ",\",$(subst \,\\,$1) ) "
117
+ julia_escape =$(call c_escape,$1)
118
+
114
119
# force a sane / stable configuration
115
120
export LC_ALL =C
116
121
export LANG =C
@@ -644,12 +649,12 @@ CXX += -Qunused-arguments
644
649
export CCACHE_CPP2 := yes
645
650
endif
646
651
else #USECCACHE
647
- CC_BASE := $(shell echo $( CC ) | cut -d' ' -f1)
648
- CC_ARG := $(shell echo $( CC ) | cut -s -d' ' -f2-)
649
- CXX_BASE := $(shell echo $( CXX ) | cut -d' ' -f1)
650
- CXX_ARG := $(shell echo $( CXX ) | cut -s -d' ' -f2-)
651
- FC_BASE := $(shell echo $( FC ) 2>/dev/null | cut -d' ' -f1)
652
- FC_ARG := $(shell echo $( FC ) 2>/dev/null | cut -s -d' ' -f2-)
652
+ CC_BASE := $(shell printf " % s\n" $( call shell_escape, $( CC ) ) | cut -d' ' -f1)
653
+ CC_ARG := $(shell printf " % s\n" $( call shell_escape, $( CC ) ) | cut -s -d' ' -f2-)
654
+ CXX_BASE := $(shell printf " % s\n" $( call shell_escape, $( CXX ) ) | cut -d' ' -f1)
655
+ CXX_ARG := $(shell printf " % s\n" $( call shell_escape, $( CXX ) ) | cut -s -d' ' -f2-)
656
+ FC_BASE := $(shell printf " % s\n" $( call shell_escape, $( FC ) ) 2>/dev/null | cut -d' ' -f1)
657
+ FC_ARG := $(shell printf " % s\n" $( call shell_escape, $( FC ) ) 2>/dev/null | cut -s -d' ' -f2-)
653
658
endif
654
659
655
660
JFFLAGS := -O2 $(fPIC )
@@ -776,7 +781,7 @@ LDFLAGS += -L$(build_libdir) -Wl,-rpath,$(build_libdir)
776
781
endif # gfortran
777
782
endif # FreeBSD
778
783
779
- ifneq ($(CC_BASE )$(CXX_BASE ) ,$(shell echo $( CC ) | cut -d' ' -f1)$(shell echo $( CXX ) | cut -d' ' -f1) )
784
+ ifneq ($(CC_BASE )$(CXX_BASE ) ,$(shell printf " % s\n" $( call shell_escape, $( CC )) | cut -d' ' -f1)$(shell printf " % s\n" $( call shell_escape, $( CXX ) ) | cut -d' ' -f1) )
780
785
$(error Forgot override directive on CC or CXX in Make.user? Cowardly refusing to build)
781
786
endif
782
787
@@ -1663,6 +1668,12 @@ $(subst /,\\,$(subst $(shell $(2) pwd),$(shell $(2) cmd //C cd),$(abspath $(1)))
1663
1668
endef
1664
1669
endif
1665
1670
1671
+ ifeq ($(OS ) , WINNT)
1672
+ normalize_path = $(subst /,\,$1)
1673
+ else
1674
+ normalize_path = $1
1675
+ endif
1676
+
1666
1677
define symlink_target # (from, to-dir, to-name)
1667
1678
CLEAN_TARGETS += clean-$$(abspath $(2 ) /$(3 ) )
1668
1679
clean-$$(abspath $(2 ) /$(3 ) ) :
@@ -1729,20 +1740,20 @@ JULIA_SYSIMG_release := $(build_private_libdir)/sys.$(SHLIB_EXT)
1729
1740
JULIA_SYSIMG := $(JULIA_SYSIMG_$(JULIA_BUILD_MODE ) )
1730
1741
1731
1742
define dep_lib_path
1732
- $(shell $(PYTHON ) $(call python_cygpath,$(JULIAHOME ) /contrib/relative_path.py) $(1 ) $(2 ) )
1743
+ $(call normalize_path, $( shell $(PYTHON ) $(call python_cygpath,$(JULIAHOME ) /contrib/relative_path.py) $(1 ) $(2 ) ) )
1733
1744
endef
1734
1745
1735
- LIBJULIAINTERNAL_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /libjulia-internal.$(JL_MAJOR_SHLIB_EXT ) )
1736
- LIBJULIAINTERNAL_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /libjulia-internal.$(JL_MAJOR_SHLIB_EXT ) )
1746
+ LIBJULIAINTERNAL_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /libjulia-internal.$(JL_MAJOR_SHLIB_EXT ) )
1747
+ LIBJULIAINTERNAL_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /libjulia-internal.$(JL_MAJOR_SHLIB_EXT ) )
1737
1748
1738
- LIBJULIAINTERNAL_DEBUG_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT ) )
1739
- LIBJULIAINTERNAL_DEBUG_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT ) )
1749
+ LIBJULIAINTERNAL_DEBUG_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT ) )
1750
+ LIBJULIAINTERNAL_DEBUG_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT ) )
1740
1751
1741
- LIBJULIACODEGEN_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /libjulia-codegen.$(JL_MAJOR_SHLIB_EXT ) )
1742
- LIBJULIACODEGEN_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /libjulia-codegen.$(JL_MAJOR_SHLIB_EXT ) )
1752
+ LIBJULIACODEGEN_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /libjulia-codegen.$(JL_MAJOR_SHLIB_EXT ) )
1753
+ LIBJULIACODEGEN_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /libjulia-codegen.$(JL_MAJOR_SHLIB_EXT ) )
1743
1754
1744
- LIBJULIACODEGEN_DEBUG_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT ) )
1745
- LIBJULIACODEGEN_DEBUG_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT ) )
1755
+ LIBJULIACODEGEN_DEBUG_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT ) )
1756
+ LIBJULIACODEGEN_DEBUG_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT ) )
1746
1757
1747
1758
ifeq ($(OS ) ,WINNT)
1748
1759
ifeq ($(BINARY ) ,32)
@@ -1770,34 +1781,34 @@ endif
1770
1781
1771
1782
# USE_SYSTEM_CSL causes it to get symlinked into build_private_shlibdir
1772
1783
ifeq ($(USE_SYSTEM_CSL ) ,1)
1773
- LIBGCC_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_private_shlibdir ) /$(LIBGCC_NAME ) )
1784
+ LIBGCC_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_private_shlibdir ) /$(LIBGCC_NAME ) )
1774
1785
else
1775
- LIBGCC_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /$(LIBGCC_NAME ) )
1786
+ LIBGCC_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /$(LIBGCC_NAME ) )
1776
1787
endif
1777
- LIBGCC_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /$(LIBGCC_NAME ) )
1788
+ LIBGCC_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /$(LIBGCC_NAME ) )
1778
1789
1779
1790
# We only bother to define this on Linux, as that's the only platform that does libstdc++ probing
1780
1791
# On all other platforms, the LIBSTDCXX_*_DEPLIB variables will be empty.
1781
1792
ifeq ($(OS ) ,Linux)
1782
1793
LIBSTDCXX_NAME := libstdc++.so.6
1783
1794
ifeq ($(USE_SYSTEM_CSL ) ,1)
1784
- LIBSTDCXX_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_private_shlibdir ) /$(LIBSTDCXX_NAME ) )
1795
+ LIBSTDCXX_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_private_shlibdir ) /$(LIBSTDCXX_NAME ) )
1785
1796
else
1786
- LIBSTDCXX_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /$(LIBSTDCXX_NAME ) )
1797
+ LIBSTDCXX_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /$(LIBSTDCXX_NAME ) )
1787
1798
endif
1788
- LIBSTDCXX_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /$(LIBSTDCXX_NAME ) )
1799
+ LIBSTDCXX_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /$(LIBSTDCXX_NAME ) )
1789
1800
endif
1790
1801
1791
1802
1792
1803
# USE_SYSTEM_LIBM and USE_SYSTEM_OPENLIBM causes it to get symlinked into build_private_shlibdir
1793
1804
ifeq ($(USE_SYSTEM_LIBM ) ,1)
1794
- LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1805
+ LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1795
1806
else ifeq ($(USE_SYSTEM_OPENLIBM),1)
1796
- LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1807
+ LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1797
1808
else
1798
- LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir ) ,$(build_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1809
+ LIBM_BUILD_DEPLIB := $(call dep_lib_path,$(build_shlibdir ) ,$(build_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1799
1810
endif
1800
- LIBM_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir ) ,$(private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1811
+ LIBM_INSTALL_DEPLIB := $(call dep_lib_path,$(shlibdir ) ,$(private_shlibdir ) /$(LIBMNAME ) .$(SHLIB_EXT ) )
1801
1812
1802
1813
# We list:
1803
1814
# * libgcc_s, because FreeBSD needs to load ours, not the system one.
@@ -1861,7 +1872,7 @@ ifeq ($(VERBOSE), 0)
1861
1872
1862
1873
QUIET_MAKE = -s
1863
1874
1864
- GOAL =$(subst ','\'' ,$(subst $(abspath $(JULIAHOME ) ) /,,$(abspath $@ ) ) )
1875
+ GOAL =$(call shell_escape ,$(subst $(abspath $(JULIAHOME ) ) /,,$(abspath $@ ) ) )
1865
1876
1866
1877
PRINT_CC = printf ' %b %b\n' $(CCCOLOR ) CC$(ENDCOLOR ) $(SRCCOLOR )$(GOAL )$(ENDCOLOR ) ; $(1 )
1867
1878
PRINT_ANALYZE = printf ' %b %b\n' $(CCCOLOR ) ANALYZE$(ENDCOLOR ) $(SRCCOLOR )$(GOAL )$(ENDCOLOR ) ; $(1 )
@@ -1873,18 +1884,18 @@ PRINT_DTRACE = printf ' %b %b\n' $(DTRACECOLOR)DTRACE$(ENDCOLOR) $(BINCOLOR)$
1873
1884
1874
1885
else
1875
1886
QUIET_MAKE =
1876
- PRINT_CC = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1877
- PRINT_ANALYZE = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1878
- PRINT_LINK = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1879
- PRINT_PERL = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1880
- PRINT_FLISP = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1881
- PRINT_JULIA = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1882
- PRINT_DTRACE = echo ' $( subst ','\'', $(1 ) )' ; $(1 )
1887
+ PRINT_CC = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1888
+ PRINT_ANALYZE = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1889
+ PRINT_LINK = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1890
+ PRINT_PERL = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1891
+ PRINT_FLISP = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1892
+ PRINT_JULIA = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1893
+ PRINT_DTRACE = printf "%s\n" $( call shell_escape, $(1 ) ) ; $(1 )
1883
1894
1884
1895
endif # VERBOSE
1885
1896
1886
1897
# Makefile debugging trick:
1887
1898
# call print-VARIABLE to see the runtime value of any variable
1888
1899
# (hardened against any special characters appearing in the output)
1889
1900
print-% :
1890
- @echo ' $* =$(subst ' , ' \ ' ' , $(subst $(newline),\n,$($*)))'
1901
+ @printf " %s\n " $( call shell_escape, $* ) =$(call shell_escape, $(subst $(newline ) ,\n,$($* ) ) )
0 commit comments