Skip to content

Commit 6cf075d

Browse files
committed
make: use older mktemp, more
Some mktemp only added -p argument recently for BSD vs. gnu consistency with other arguments, so use `abspath` instead to emulate it. Use it to make various file builds atomic (particularly those shared between release and debug).
1 parent 941e459 commit 6cf075d

File tree

4 files changed

+58
-41
lines changed

4 files changed

+58
-41
lines changed

cli/Makefile

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,26 +75,28 @@ DIRS = $(build_bindir) $(build_libdir)
7575
$(foreach dir,$(DIRS),$(eval $(call dir_target,$(dir))))
7676

7777
ifeq ($(OS),WINNT)
78-
$(BUILDDIR)/julia_res.o: $(JULIAHOME)/contrib/windows/julia.rc $(JULIAHOME)/VERSION
78+
$(BUILDDIR)/julia_res.o $(BUILDDIR)/julia_res_debug.o: $(JULIAHOME)/contrib/windows/julia.rc $(JULIAHOME)/VERSION
7979
JLVER=`cat $(JULIAHOME)/VERSION` && \
8080
JLVERi=`echo $$JLVER | perl -nle \
8181
'/^(\d+)\.?(\d*)\.?(\d*)/ && \
8282
print int $$1,",",int $$2,",",int $$3,",0"'` && \
8383
$(CROSS_COMPILE)windres $< -O coff -o $@ -DJLVER=$$JLVERi -DJLVER_STR=\\\"$$JLVER\\\"
8484
EXE_OBJS += $(BUILDDIR)/julia_res.o
85-
EXE_DOBJS += $(BUILDDIR)/julia_res.o
85+
EXE_DOBJS += $(BUILDDIR)/julia_res_debug.o
8686
endif
8787

8888
# Embed an Info.plist in the julia executable
8989
# Create an intermediate target Info.plist for Darwin code signing.
9090
ifeq ($(DARWIN_FRAMEWORK),1)
9191
$(BUILDDIR)/Info.plist: $(JULIAHOME)/VERSION
92-
/usr/libexec/PlistBuddy -x -c "Clear dict" $@
93-
/usr/libexec/PlistBuddy -x -c "Add :CFBundleName string julia" $@
94-
/usr/libexec/PlistBuddy -x -c "Add :CFBundleIdentifier string $(darwin_codesign_id_julia_ui)" $@
95-
/usr/libexec/PlistBuddy -x -c "Add :CFBundleInfoDictionaryVersion string 6.0" $@
96-
/usr/libexec/PlistBuddy -x -c "Add :CFBundleVersion string $(JULIA_COMMIT)" $@
97-
/usr/libexec/PlistBuddy -x -c "Add :CFBundleShortVersionString string $(JULIA_MAJOR_VERSION).$(JULIA_MINOR_VERSION).$(JULIA_PATCH_VERSION)" $@
92+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
93+
/usr/libexec/PlistBuddy -x -c "Clear dict" $$TMPFILE; \
94+
/usr/libexec/PlistBuddy -x -c "Add :CFBundleName string julia" $$TMPFILE; \
95+
/usr/libexec/PlistBuddy -x -c "Add :CFBundleIdentifier string $(darwin_codesign_id_julia_ui)" $$TMPFILE; \
96+
/usr/libexec/PlistBuddy -x -c "Add :CFBundleInfoDictionaryVersion string 6.0" $$TMPFILE; \
97+
/usr/libexec/PlistBuddy -x -c "Add :CFBundleVersion string $(JULIA_COMMIT)" $$TMPFILE; \
98+
/usr/libexec/PlistBuddy -x -c "Add :CFBundleShortVersionString string $(JULIA_MAJOR_VERSION).$(JULIA_MINOR_VERSION).$(JULIA_PATCH_VERSION)" $$TMPFILE; \
99+
mv $$TMPFILE $@
98100
.INTERMEDIATE: $(BUILDDIR)/Info.plist # cleanup this file after we are done using it
99101
JLDFLAGS += -Wl,-sectcreate,__TEXT,__info_plist,Info.plist
100102
$(build_bindir)/julia$(EXE): $(BUILDDIR)/Info.plist
@@ -151,11 +153,13 @@ $(build_bindir)/julia-debug$(EXE): $(EXE_DOBJS) $(build_shlibdir)/libjulia-debug
151153
@$(call PRINT_LINK, $(CC) $(LOADER_CFLAGS) $(DEBUGFLAGS) $(EXE_DOBJS) -o $@ $(LOADER_LDFLAGS) $(RPATH) -ljulia-debug)
152154

153155
$(BUILDDIR)/julia.expmap: $(SRCDIR)/julia.expmap.in $(JULIAHOME)/VERSION
154-
sed <'$<' >'$@' -e 's/@JULIA_SHLIB_SYMBOL_VERSION@/JL_LIBJULIA_$(SOMAJOR)/'
156+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
157+
sed <'$<' >$$TMPFILE -e 's/@JULIA_SHLIB_SYMBOL_VERSION@/JL_LIBJULIA_$(SOMAJOR)/'; \
158+
mv $$TMPFILE $@
155159

156160
clean: | $(CLEAN_TARGETS)
157161
rm -f $(BUILDDIR)/*.o $(BUILDDIR)/*.dbg.obj
158162
rm -f $(build_bindir)/julia*
159-
rm -f $(BUILDDIR)/julia.expmap
163+
rm -f $(BUILDDIR)/julia.expmap*
160164

161165
.PHONY: clean release debug julia-release julia-debug

src/Makefile

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -273,19 +273,23 @@ $(BUILDDIR)/%.h.gen : $(SRCDIR)/%.d
273273
sed 's/JULIA_/JL_PROBE_/' $@ > $@.tmp
274274
mv $@.tmp $@
275275

276+
# Generate `.inc` file that contains a list of `#define` macros to rename functions defined in `libjulia-internal`
277+
# to have a `ijl_` prefix instead of `jl_`, to denote that they are coming from `libjulia-internal`. This avoids
278+
# potential confusion with debugging tools, when inspecting a process that has both `libjulia` and `libjulia-internal`
279+
# loaded at the same time.
276280
$(BUILDDIR)/jl_internal_funcs.inc: $(SRCDIR)/jl_exported_funcs.inc
277-
# Generate `.inc` file that contains a list of `#define` macros to rename functions defined in `libjulia-internal`
278-
# to have a `ijl_` prefix instead of `jl_`, to denote that they are coming from `libjulia-internal`. This avoids
279-
# potential confusion with debugging tools, when inspecting a process that has both `libjulia` and `libjulia-internal`
280-
# loaded at the same time.
281-
grep 'XX(..*)' $< | sed -E 's/.*XX\((.+)\).*/#define \1 i\1/g' >$@
281+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
282+
grep 'XX(..*)' $< | sed -E 's/.*XX\((.+)\).*/#define \1 i\1/g' > $$TMPFILE; \
283+
mv $$TMPFILE $@
282284

285+
# Generate `.inc` file that contains a list of `#define` macros to access global data through struct instances
283286
$(BUILDDIR)/jl_data_globals_defs.inc: $(SRCDIR)/jl_exported_data.inc
284-
# Generate `.inc` file that contains a list of `#define` macros to access global data through struct instances
287+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
285288
{ \
286289
grep 'XX(.*)' $< | sed -E 's/.*XX\(([^,]+), .*\).*/#define jl_\1 (sysimg_global.\1)/g'; \
287290
grep 'YY(.*)' $< | sed -E 's/.*YY\(([^,]+), .*\).*/#define jl_\1 (const_globals.jl\1)/g'; \
288-
} >$@
291+
} > $$TMPFILE; \
292+
mv $$TMPFILE $@
289293

290294
# source file rules
291295
$(BUILDDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) | $(BUILDDIR)
@@ -352,13 +356,17 @@ $(build_shlibdir)/libllvmcalltest.$(SHLIB_EXT): $(SRCDIR)/llvmcalltest.cpp $(LLV
352356
julia_flisp.boot.inc.phony: $(BUILDDIR)/julia_flisp.boot.inc
353357

354358
$(BUILDDIR)/julia_flisp.boot.inc: $(BUILDDIR)/julia_flisp.boot $(FLISP_EXECUTABLE_release)
355-
@$(call PRINT_FLISP, $(call spawn,$(FLISP_EXECUTABLE_release)) $(call cygpath_w,$(SRCDIR)/bin2hex.scm) < $< > $@)
359+
@$(call PRINT_FLISP, TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
360+
$(call spawn,$(FLISP_EXECUTABLE_release)) $(call cygpath_w,$(SRCDIR)/bin2hex.scm) < $< > $$TMPFILE; \
361+
mv $$TMPFILE $@)
356362

357363
$(BUILDDIR)/julia_flisp.boot: $(addprefix $(SRCDIR)/,jlfrontend.scm flisp/aliases.scm flisp/profile.scm \
358364
julia-parser.scm julia-syntax.scm match.scm utils.scm ast.scm macroexpand.scm mk_julia_flisp_boot.scm) \
359365
$(FLISP_EXECUTABLE_release)
360-
@$(call PRINT_FLISP, $(call spawn,$(FLISP_EXECUTABLE_release)) \
361-
$(call cygpath_w,$(SRCDIR)/mk_julia_flisp_boot.scm) $(call cygpath_w,$(dir $<)) $(notdir $<) $(call cygpath_w,$@))
366+
@$(call PRINT_FLISP, TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
367+
$(call spawn,$(FLISP_EXECUTABLE_release)) \
368+
$(call cygpath_w,$(SRCDIR)/mk_julia_flisp_boot.scm) $(call cygpath_w,$(dir $<)) $(notdir $<) $(call cygpath_w,$$TMPFILE); \
369+
mv $$TMPFILE $@)
362370

363371
# additional dependency links
364372
$(BUILDDIR)/codegen-stubs.o $(BUILDDIR)/codegen-stubs.dbg.obj: $(addprefix $(SRCDIR)/,intrinsics.h llvm-julia-passes.inc)
@@ -427,23 +435,28 @@ $(BUILDDIR)/flisp/libflisp-debug.a: $(addprefix $(SRCDIR)/,flisp/*.h flisp/*.c)
427435
$(MAKE) -C $(SRCDIR)/flisp debug BUILDDIR='$(abspath $(BUILDDIR)/flisp)'
428436

429437
$(BUILDDIR)/julia_version.h: $(JULIAHOME)/VERSION
430-
@echo "// This is an autogenerated header file" > $@.$(JULIA_BUILD_MODE).tmp
431-
@echo "#ifndef JL_VERSION_H" >> $@.$(JULIA_BUILD_MODE).tmp
432-
@echo "#define JL_VERSION_H" >> $@.$(JULIA_BUILD_MODE).tmp
433-
@echo "#define JULIA_VERSION_STRING" \"$(JULIA_VERSION)\" >> $@.$(JULIA_BUILD_MODE).tmp
434-
@echo $(JULIA_VERSION) | awk 'BEGIN {FS="[.,+-]"} \
435-
{print "#define JULIA_VERSION_MAJOR " $$1 "\n" \
436-
"#define JULIA_VERSION_MINOR " $$2 "\n" \
437-
"#define JULIA_VERSION_PATCH " $$3 ; \
438-
if (NF<4) print "#define JULIA_VERSION_IS_RELEASE 1" ; else print "#define JULIA_VERSION_IS_RELEASE 0"}' >> $@.$(JULIA_BUILD_MODE).tmp
439-
@echo "#endif" >> $@.$(JULIA_BUILD_MODE).tmp
440-
mv $@.$(JULIA_BUILD_MODE).tmp $@
438+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
439+
{ \
440+
echo "// This is an autogenerated header file"; \
441+
echo "#ifndef JL_VERSION_H"; \
442+
echo "#define JL_VERSION_H"; \
443+
echo "#define JULIA_VERSION_STRING" \"$(JULIA_VERSION)\"; \
444+
echo $(JULIA_VERSION) | awk 'BEGIN {FS="[.,+-]"} \
445+
{print "#define JULIA_VERSION_MAJOR " $$1 "\n" \
446+
"#define JULIA_VERSION_MINOR " $$2 "\n" \
447+
"#define JULIA_VERSION_PATCH " $$3 ; \
448+
if (NF<4) print "#define JULIA_VERSION_IS_RELEASE 1" ; else print "#define JULIA_VERSION_IS_RELEASE 0"}'; \
449+
echo "#endif"; \
450+
} > $$TMPFILE; \
451+
mv $$TMPFILE $@
441452

442453
CXXLD = $(CXX) -shared
443454

444455
$(BUILDDIR)/julia.expmap: $(SRCDIR)/julia.expmap.in $(JULIAHOME)/VERSION $(LLVM_CONFIG_ABSOLUTE)
445-
sed <'$<' >'$@' -e "s/@JULIA_SHLIB_SYMBOL_VERSION@/JL_LIBJULIA_$(SOMAJOR)/" \
446-
-e "s/@LLVM_SHLIB_SYMBOL_VERSION@/$(LLVM_SHLIB_SYMBOL_VERSION)/"
456+
@TMPFILE=$$(mktemp $(abspath $@.XXXXXX)); \
457+
sed <'$<' >$$TMPFILE -e "s/@JULIA_SHLIB_SYMBOL_VERSION@/JL_LIBJULIA_$(SOMAJOR)/" \
458+
-e "s/@LLVM_SHLIB_SYMBOL_VERSION@/$(LLVM_SHLIB_SYMBOL_VERSION)/"; \
459+
mv $$TMPFILE $@
447460

448461
$(build_shlibdir)/libjulia-internal.$(JL_MAJOR_MINOR_SHLIB_EXT): $(BUILDDIR)/julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(LIBUV)
449462
@$(call PRINT_LINK, $(CXXLD) $(call IMPLIB_FLAGS,$@) $(SHIPFLAGS) $(JCXXFLAGS) $(CXXLDFLAGS) $(OBJS) $(RPATH_LIB) -o $@ \
@@ -554,11 +567,11 @@ INCLUDED_CXX_FILES := \
554567
clean:
555568
-rm -fr $(build_shlibdir)/libjulia-internal* $(build_shlibdir)/libjulia-codegen*
556569
-rm -rf $(build_shlibdir)/libccalltest* $(build_shlibdir)/libllvmcalltest* $(build_shlibdir)/libccalllazyfoo* $(build_shlibdir)/libccalllazybar*
557-
-rm -f $(BUILDDIR)/julia_flisp.boot $(BUILDDIR)/julia_flisp.boot.inc $(BUILDDIR)/jl_internal_funcs.inc $(BUILDDIR)/jl_data_globals_defs.inc
570+
-rm -f $(BUILDDIR)/julia_flisp.boot* $(BUILDDIR)/julia_flisp.boot.inc* $(BUILDDIR)/jl_internal_funcs.inc* $(BUILDDIR)/jl_data_globals_defs.inc*
558571
-rm -f $(BUILDDIR)/*.dbg.obj $(BUILDDIR)/*.o $(BUILDDIR)/*.dwo $(BUILDDIR)/*.$(SHLIB_EXT) $(BUILDDIR)/*.a $(BUILDDIR)/*.h.gen
559-
-rm -f $(BUILDDIR)/julia.expmap
572+
-rm -f $(BUILDDIR)/julia.expmap*
560573
-rm -f $(BUILDDIR)/julia_version.h
561-
-rm -f $(BUILDDIR)/compile_commands.json
574+
-rm -f $(BUILDDIR)/compile_commands.json*
562575

563576
clean-flisp:
564577
-$(MAKE) -C $(SRCDIR)/flisp clean BUILDDIR='$(abspath $(BUILDDIR)/flisp)'
@@ -657,7 +670,7 @@ clean-analyzegc:
657670
# Compilation database generation using existing clang infrastructure
658671
.PHONY: regenerate-compile_commands
659672
regenerate-compile_commands:
660-
TMPFILE=$$(mktemp -p $(BUILDDIR) compile_commands.json.XXXXXX); \
673+
@TMPFILE=$$(mktemp $(abspath $(BUILDDIR)/compile_commands.json.XXXXXX)); \
661674
{ \
662675
CLANG_TOOLING_C_FLAGS="$$($(JULIAHOME)/contrib/escape_json.sh clang $(CLANG_TOOLING_C_FLAGS))"; \
663676
CLANG_TOOLING_CXX_FLAGS="$$($(JULIAHOME)/contrib/escape_json.sh clang $(CLANG_TOOLING_CXX_FLAGS))"; \

src/flisp/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ INCLUDED_FLISP_FILES := flisp.c:cvalues.c flisp.c:types.c flisp.c:print.c flisp.
142142
# Compilation database generation
143143
.PHONY: regenerate-compile_commands
144144
regenerate-compile_commands:
145-
TMPFILE=$$(mktemp -p $(BUILDDIR) compile_commands.json.XXXXXX); \
145+
@TMPFILE=$$(mktemp $(abspath $(BUILDDIR)/compile_commands.json.XXXXXX)); \
146146
{ \
147147
CLANG_TOOLING_C_FLAGS="$$($(JULIAHOME)/contrib/escape_json.sh clang $(CLANG_TOOLING_C_FLAGS))"; \
148148
echo "["; \
@@ -176,7 +176,7 @@ clean:
176176
rm -f $(BUILDDIR)/*.a
177177
rm -f $(BUILDDIR)/$(EXENAME)$(EXE)
178178
rm -f $(BUILDDIR)/$(EXENAME)-debug$(EXE)
179-
rm -f $(BUILDDIR)/compile_commands.json
179+
rm -f $(BUILDDIR)/compile_commands.json*
180180
rm -f $(BUILDDIR)/host/*
181181

182182
.PHONY: flisp-deps compile-database

src/support/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ INCLUDED_SUPPORT_FILES := hashing.c:MurmurHash3.c
8080
# Compilation database generation
8181
.PHONY: regenerate-compile_commands
8282
regenerate-compile_commands:
83-
TMPFILE=$$(mktemp -p $(BUILDDIR) compile_commands.json.XXXXXX); \
83+
@TMPFILE=$$(mktemp $(abspath $(BUILDDIR)/compile_commands.json.XXXXXX)); \
8484
{ \
8585
CLANG_TOOLING_S_FLAGS="$$($(JULIAHOME)/contrib/escape_json.sh clang $(JCPPFLAGS) $(DEBUGFLAGS))"; \
8686
CLANG_TOOLING_C_FLAGS="$$($(JULIAHOME)/contrib/escape_json.sh clang $(JCPPFLAGS) $(JCFLAGS) $(DEBUGFLAGS))"; \
@@ -123,7 +123,7 @@ clean:
123123
rm -f $(BUILDDIR)/core*
124124
rm -f $(BUILDDIR)/libsupport.a
125125
rm -f $(BUILDDIR)/libsupport-debug.a
126-
rm -f $(BUILDDIR)/compile_commands.json
126+
rm -f $(BUILDDIR)/compile_commands.json*
127127
rm -f $(BUILDDIR)/host/*
128128

129129
.PHONY: compile-database

0 commit comments

Comments
 (0)