Browse code

build: create output directories as needed

Signed-off-by: Mans Rullgard <mans@mansr.com>

Mans Rullgard authored on 2011/06/29 02:45:13
Showing 4 changed files
... ...
@@ -122,9 +122,11 @@ alltools: $(TOOLS)
122 122
 tools/%$(EXESUF): tools/%.o
123 123
 	$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
124 124
 
125
-tools/%.o: tools/%.c
125
+tools/%.o: tools/%.c | tools
126 126
 	$(CC) $(CPPFLAGS) $(CFLAGS) -c $(CC_O) $<
127 127
 
128
+OBJDIRS += tools
129
+
128 130
 -include $(wildcard tools/*.d)
129 131
 
130 132
 VERSION_SH  = $(SRC_PATH)/version.sh
... ...
@@ -185,6 +187,9 @@ check: test checkheaders
185 185
 include $(SRC_PATH)/doc/Makefile
186 186
 include $(SRC_PATH)/tests/Makefile
187 187
 
188
+$(sort $(OBJDIRS)):
189
+	$(Q)mkdir -p $@
190
+
188 191
 # Dummy rule to stop make trying to rebuild removed or renamed headers
189 192
 %.h:
190 193
 	@:
... ...
@@ -34,6 +34,12 @@ $(HOSTOBJS): %.o: %.c
34 34
 $(HOSTPROGS): %$(HOSTEXESUF): %.o
35 35
 	$(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
36 36
 
37
+$(OBJS):     | $(dir $(OBJS))
38
+$(HOSTOBJS): | $(dir $(HOSTOBJS))
39
+$(TESTOBJS): | $(dir $(TESTOBJS))
40
+
41
+OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOSTOBJS) $(TESTOBJS))
42
+
37 43
 CLEANSUFFIXES     = *.d *.o *~ *.ho *.map *.ver
38 44
 DISTCLEANSUFFIXES = *.pc
39 45
 LIBSUFFIXES       = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
... ...
@@ -875,9 +875,9 @@ apply(){
875 875
 }
876 876
 
877 877
 cp_if_changed(){
878
-    cmp -s "$1" "$2" &&
879
-        echo "$2 is unchanged" ||
880
-        cp -f "$1" "$2"
878
+    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
879
+    mkdir -p "$(dirname $2)"
880
+    cp -f "$1" "$2"
881 881
 }
882 882
 
883 883
 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
... ...
@@ -1675,10 +1675,8 @@ DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1675 1675
 # find source path
1676 1676
 if test -f configure; then
1677 1677
     source_path=.
1678
-    disable source_path_used
1679 1678
 else
1680 1679
     source_path=$(cd $(dirname "$0"); pwd)
1681
-    enable source_path_used
1682 1680
     echo "$source_path" | grep -q '[[:blank:]]' &&
1683 1681
         die "Out of tree builds are impossible with whitespace in source path."
1684 1682
     test -e "$source_path/config.h" &&
... ...
@@ -3180,27 +3178,7 @@ echo "License: $license"
3180 3180
 
3181 3181
 echo "Creating config.mak and config.h..."
3182 3182
 
3183
-# build tree in object directory if source path is different from current one
3184
-if enabled source_path_used; then
3185
-    DIRS="
3186
-        doc
3187
-        libavcodec
3188
-        libavcodec/$arch
3189
-        libavdevice
3190
-        libavfilter
3191
-        libavfilter/$arch
3192
-        libavformat
3193
-        libavutil
3194
-        libavutil/$arch
3195
-        libpostproc
3196
-        libswscale
3197
-        libswscale/$arch
3198
-        tests
3199
-        tools
3200
-    "
3201
-    map 'mkdir -p $v' $DIRS;
3202
-    $ln_s "$source_path/Makefile" .
3203
-fi
3183
+test -e Makefile || $ln_s "$source_path/Makefile" .
3204 3184
 
3205 3185
 config_files="$TMPH config.mak"
3206 3186
 
... ...
@@ -3379,6 +3357,7 @@ version=$3
3379 3379
 libs=$4
3380 3380
 requires=$5
3381 3381
 enabled ${name#lib} || return 0
3382
+mkdir -p $name
3382 3383
 cat <<EOF > $name/$name.pc
3383 3384
 prefix=$prefix
3384 3385
 exec_prefix=\${prefix}
... ...
@@ -24,6 +24,9 @@ doc/%.1: TAG = MAN
24 24
 doc/%.1: doc/%.pod
25 25
 	$(M)pod2man --section=1 --center=" " --release=" " $< > $@
26 26
 
27
+$(DOCS): | doc
28
+OBJDIRS += doc
29
+
27 30
 install-progs-$(CONFIG_DOC): install-man
28 31
 
29 32
 install-man: $(MANPAGES)