]> git.sesse.net Git - vlc/blob - Makefile
* ALL: the first libvlc commit.
[vlc] / Makefile
1 ###############################################################################
2 # vlc (VideoLAN Client) main Makefile - (c)1998 VideoLAN
3 ###############################################################################
4
5 ifeq ($(shell [ ! -r Makefile.opts ] && echo 1),)
6     include Makefile.opts
7 endif
8 ifeq ($(shell [ ! -r Makefile.config ] && echo 1),)
9     include Makefile.config
10 endif
11
12 ###############################################################################
13 # Objects and files
14 ###############################################################################
15
16
17 # All possible plugin directories, needed for make clean
18 #
19 PLUGINS_DIR :=  a52 \
20                 aa \
21                 ac3_adec \
22                 ac3_spdif \
23                 access \
24                 alsa \
25                 arts \
26                 avi \
27                 beos \
28                 chroma \
29                 directx \
30                 downmix \
31                 dsp \
32                 dummy \
33                 dvd \
34                 dvdread \
35                 esd \
36                 fb \
37                 ffmpeg \
38                 filter \
39                 fx \
40                 ggi \
41                 glide \
42                 gtk \
43                 idct \
44                 imdct \
45                 kde \
46                 lirc \
47                 lpcm_adec \
48                 macosx \
49                 mad \
50                 memcpy \
51                 mga \
52                 motion \
53                 mpeg_system \
54                 mpeg_adec \
55                 mpeg_vdec \
56                 network \
57                 ogg \
58                 qnx \
59                 qt \
60                 satellite \
61                 sdl \
62                 spudec \
63                 text \
64                 vcd \
65                 win32 \
66                 x11
67
68 PLUGINS_TARGETS := a52/a52 \
69                 aa/aa \
70                 ac3_adec/ac3_adec \
71                 ac3_spdif/ac3_spdif \
72                 access/file \
73                 access/udp \
74                 access/http \
75                 alsa/alsa \
76                 arts/arts \
77                 avi/avi \
78                 beos/beos \
79                 chroma/chroma_i420_rgb \
80                 chroma/chroma_i420_rgb_mmx \
81                 chroma/chroma_i420_yuy2 \
82                 chroma/chroma_i420_yuy2_mmx \
83                 chroma/chroma_i422_yuy2 \
84                 chroma/chroma_i422_yuy2_mmx \
85                 chroma/chroma_i420_ymga \
86                 chroma/chroma_i420_ymga_mmx \
87                 directx/directx \
88                 downmix/downmix \
89                 downmix/downmixsse \
90                 downmix/downmix3dn \
91                 dsp/dsp \
92                 dummy/dummy \
93                 dummy/null \
94                 dvd/dvd \
95                 dvdread/dvdread \
96                 esd/esd \
97                 fb/fb \
98                 ffmpeg/ffmpeg \
99                 filter/filter_clone \
100                 filter/filter_deinterlace \
101                 filter/filter_distort \
102                 filter/filter_invert \
103                 filter/filter_transform \
104                 filter/filter_wall \
105                 filter/filter_clone \
106                 fx/fx_scope \
107                 ggi/ggi \
108                 glide/glide \
109                 gtk/gnome \
110                 gtk/gtk \
111                 idct/idct \
112                 idct/idctclassic \
113                 idct/idctmmx \
114                 idct/idctmmxext \
115                 idct/idctaltivec \
116                 imdct/imdct \
117                 imdct/imdct3dn \
118                 imdct/imdctsse \
119                 kde/kde \
120                 lirc/lirc \
121                 lpcm_adec/lpcm_adec \
122                 macosx/macosx \
123                 mad/mad \
124                 memcpy/memcpy \
125                 memcpy/memcpymmx \
126                 memcpy/memcpymmxext \
127                 memcpy/memcpy3dn \
128                 memcpy/memcpyaltivec \
129                 mga/mga \
130                 mga/xmga \
131                 motion/motion \
132                 motion/motionmmx \
133                 motion/motionmmxext \
134                 motion/motion3dnow \
135                 motion/motionaltivec \
136                 mpeg_system/mpeg_audio \
137                 mpeg_system/mpeg_es \
138                 mpeg_system/mpeg_ps \
139                 mpeg_system/mpeg_ts \
140                 mpeg_system/mpeg_ts_dvbpsi \
141                 mpeg_adec/mpeg_adec \
142                 mpeg_vdec/mpeg_vdec \
143                 network/ipv4 \
144                 network/ipv6 \
145                 ogg/vorbis \
146                 qnx/qnx \
147                 qt/qt \
148                 satellite/satellite \
149                 sdl/sdl \
150                 spudec/spudec \
151                 text/logger \
152                 text/ncurses \
153                 text/rc \
154                 vcd/vcd \
155                 win32/waveout \
156                 win32/intfwin \
157                 x11/x11 \
158                 x11/xvideo
159
160 #
161 # C Objects
162
163 VLC := vlc
164 LIBVLC := libvlc
165 INTERFACE := interface intf_eject
166 PLAYLIST := playlist
167 INPUT := input input_ext-plugins input_ext-dec input_ext-intf input_dec input_programs input_clock mpeg_system
168 VIDEO_OUTPUT := video_output video_text vout_pictures vout_subpictures
169 AUDIO_OUTPUT := audio_output aout_ext-dec aout_pcm aout_spdif
170 MISC := mtime modules threads cpu configuration netutils iso_lang messages objects
171
172 LIBVLC_OBJ :=   $(LIBVLC:%=src/%.o) \
173                 $(INTERFACE:%=src/interface/%.o) \
174                 $(PLAYLIST:%=src/playlist/%.o) \
175                 $(INPUT:%=src/input/%.o) \
176                 $(VIDEO_OUTPUT:%=src/video_output/%.o) \
177                 $(AUDIO_OUTPUT:%=src/audio_output/%.o) \
178                 $(MISC:%=src/misc/%.o)
179
180 VLC_OBJ := $(VLC:%=src/%.o)
181
182 C_OBJ := $(VLC_OBJ) $(LIBVLC_OBJ)
183
184 #
185 # Misc Objects
186
187 ifeq ($(NEED_GETOPT),1)
188 LIBVLC_OBJ += extras/GNUgetopt/getopt.o extras/GNUgetopt/getopt1.o 
189 endif
190
191 ifeq ($(NEED_SYMBOLS),1)
192 LIBVLC_OBJ += src/misc/symbols.o
193 endif
194
195 ifeq ($(SYS),beos)
196 CPP_OBJ :=      src/misc/beos_specific.o
197 endif
198
199 ifneq (,$(findstring darwin,$(SYS)))
200 LIBVLC_OBJ +=   src/misc/darwin_specific.o
201 endif
202
203 ifneq (,$(findstring mingw32,$(SYS)))
204 LIBVLC_OBJ +=   src/misc/win32_specific.o
205 RESOURCE_OBJ := share/vlc_win32_rc.o
206 endif
207
208 LIBVLC_OBJ += $(CPP_OBJ) $(M_OBJ) $(BUILTIN_OBJ)
209 VLC_OBJ += $(RESOURCE_OBJ)
210
211 #
212 # Generated header
213 #
214 H_OBJ :=        src/misc/modules_builtin.h
215
216 #
217 # Other lists of files
218 #
219 C_DEP := $(C_OBJ:%.o=.dep/%.d)
220 CPP_DEP := $(CPP_OBJ:%.o=.dep/%.dpp)
221
222 #
223 # Translate plugin names
224 #
225 ifneq (,$(PLUGINS))
226 PLUGIN_OBJ := $(shell for i in $(PLUGINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@plugins/\1.so@' -e 's@^ .*@@' ; done)
227 endif
228 ifneq (,$(BUILTINS))
229 BUILTIN_OBJ := $(shell for i in $(BUILTINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@plugins/\1.a@' -e 's@^ .*@@' ; done)
230 endif
231
232 #
233 # Misc variables
234 #
235 VERSION := $(shell grep '^ *VERSION=' configure.in | head -1 | sed 's/"//g' | cut -f2 -d=)
236
237 # All symbols must be exported
238 export
239
240 ###############################################################################
241 # Targets
242 ###############################################################################
243
244 #
245 # Virtual targets
246 #
247 all: Makefile.opts vlc ${ALIASES} vlc.app plugins po
248
249 Makefile.opts:
250         @echo "**** No configuration found, please run ./configure"
251         @exit 1
252 #       ./configure
253 #       $(MAKE) $(MAKECMDGOALS)
254 #       exit    
255
256 show:
257         @echo CC: $(CC)
258         @echo CFLAGS: $(CFLAGS)
259         @echo LDFLAGS: $(LDFLAGS)
260         @echo plugins_CFLAGS: $(plugins_CFLAGS)
261         @echo plugins_LDFLAGS: $(plugins_LDFLAGS)
262         @echo builtins_CFLAGS: $(builtins_CFLAGS)
263         @echo builtins_LDFLAGS: $(builtins_LDFLAGS)
264         @echo C_OBJ: $(C_OBJ)
265         @echo CPP_OBJ: $(CPP_OBJ)
266         @echo PLUGIN_OBJ: $(PLUGIN_OBJ)
267         @echo BUILTIN_OBJ: $(BUILTIN_OBJ)
268
269 #
270 # Cleaning rules
271 #
272 clean: plugins-clean po-clean vlc-clean
273         rm -f src/*/*.o extras/*/*.o
274         rm -f lib/*.so* lib/*.a
275         rm -f plugins/*.so plugins/*.a plugins/*.lib plugins/*.tds
276         rm -Rf extras/MacOSX/build
277
278 po-clean:
279         -cd po && $(MAKE) clean
280
281 plugins-clean:
282         for dir in $(PLUGINS_DIR) ; do \
283                 ( cd plugins/$${dir} \
284                         && $(MAKE) -f ../../Makefile.modules clean ) ; done
285         rm -f plugins/*/*.o plugins/*/*.lo plugins/*/*.moc plugins/*/*.bak
286
287 vlc-clean:
288         rm -f $(C_OBJ) $(CPP_OBJ)
289         rm -f vlc gnome-vlc gvlc kvlc qvlc vlc.exe
290         rm -Rf vlc.app
291
292 distclean: clean
293         -cd po && $(MAKE) maintainer-clean
294         rm -f **/*.o **/*~ *.log
295         rm -f Makefile.opts Makefile.config
296         rm -f include/defs.h include/modules_builtin.h
297         rm -f src/misc/modules_builtin.h
298         rm -f config*status config*cache config*log conftest*
299         rm -f gmon.out core build-stamp
300         rm -Rf .dep
301         rm -f .gdb_history
302
303 #
304 # Install/uninstall rules
305 #
306 install: vlc-install plugins-install po-install
307
308 uninstall: vlc-uninstall plugins-uninstall po-uninstall
309
310 vlc-install:
311         mkdir -p $(DESTDIR)$(bindir)
312         $(INSTALL) vlc $(DESTDIR)$(bindir)
313 ifneq (,$(ALIASES))
314         for alias in $(ALIASES) ; do if test $$alias ; then rm -f $(DESTDIR)$(bindir)/$$alias && ln -s vlc $(DESTDIR)$(bindir)/$$alias ; fi ; done
315 endif
316         mkdir -p $(DESTDIR)$(datadir)/vlc
317         $(INSTALL) -m 644 share/*.psf $(DESTDIR)$(datadir)/vlc
318         $(INSTALL) -m 644 share/*.png $(DESTDIR)$(datadir)/vlc
319         $(INSTALL) -m 644 share/*.xpm $(DESTDIR)$(datadir)/vlc
320
321 vlc-uninstall:
322         rm -f $(DESTDIR)$(bindir)/vlc
323 ifneq (,$(ALIASES))
324         for alias in $(ALIASES) ; do if test $$alias ; then rm -f $(DESTDIR)$(bindir)/$$alias ; fi ; done
325 endif
326         rm -f $(DESTDIR)$(datadir)/vlc/*.psf
327         rm -f $(DESTDIR)$(datadir)/vlc/*.png
328         rm -f $(DESTDIR)$(datadir)/vlc/*.xpm
329
330 plugins-install:
331         mkdir -p $(DESTDIR)$(libdir)/vlc
332 ifneq (,$(PLUGINS))
333         $(INSTALL) -m 644 $(PLUGINS:%=plugins/%.so) $(DESTDIR)$(libdir)/vlc
334 endif
335
336 plugins-uninstall:
337         rm -f $(DESTDIR)$(libdir)/vlc/*.so
338
339 po-install:
340         -cd po && $(MAKE) install
341
342 po-uninstall:
343         -cd po && $(MAKE) uninstall
344
345 #
346 # Package generation rules
347 #
348 dist:
349         # Check that tmp isn't in the way
350         @if test -e tmp; then \
351                 echo "Error: please remove ./tmp, it is in the way"; false; \
352         else \
353                 echo "OK."; mkdir tmp; \
354         fi
355         # Copy directory structure in tmp
356         find -type d | grep -v '\(\.dep\|snapshot\|CVS\)' | while read i ; \
357                 do mkdir -p tmp/vlc/$$i ; \
358         done
359         rm -Rf tmp/vlc/tmp
360         find debian -mindepth 1 -maxdepth 1 -type d | \
361                 while read i ; do rm -Rf tmp/vlc/$$i ; done
362         # Copy .c .h .in .cpp .m and .glade files
363         find include src plugins -type f -name '*.[bcdhigmrst]*' | while read i ; \
364                 do cp $$i tmp/vlc/$$i ; done
365         # Grmbl... special case...
366         for i in API BUGS DESIGN TODO ; \
367                 do cp plugins/mad/$$i tmp/vlc/plugins/mad ; done
368         # Copy plugin Makefiles
369         find plugins -type f -name Makefile | while read i ; \
370                 do cp $$i tmp/vlc/$$i ; done
371         # Copy extra programs and documentation
372         cp -a extras/* tmp/vlc/extras
373         cp -a doc/* tmp/vlc/doc
374         find tmp/vlc/extras tmp/vlc/doc \
375                 -type d -name CVS -o -name '.*' -o -name '*.[o]' | \
376                         while read i ; do rm -Rf $$i ; done
377         # Copy gettext stuff
378         cp po/ChangeLog po/vlc.pot po/*.po tmp/vlc/po
379         for i in Makefile.in.in POTFILES.in ; do cp po/$$i tmp/vlc/po ; done
380         # Copy misc files
381         cp FAQ AUTHORS COPYING TODO todo.pl ChangeLog* README* INSTALL* \
382                 ABOUT-NLS BUGS MODULES vlc.spec \
383                 Makefile Makefile.*.in Makefile.dep Makefile.modules \
384                 configure configure.in install-sh install-win32 macosx-dmg \
385                 config.sub config.guess aclocal.m4 mkinstalldirs \
386                         tmp/vlc/
387         # Copy Debian control files
388         for file in debian/*dirs debian/*docs debian/*menu debian/*desktop \
389                 debian/*copyright ; do cp $$file tmp/vlc/debian ; done
390         for file in control changelog rules ; do \
391                 cp debian/$$file tmp/vlc/debian/ ; done
392         # Copy ipkg control files
393         for file in control rules patch ; do \
394                 cp ipkg/$$file tmp/vlc/ipkg/ ; done
395         # Copy fonts and icons
396         for file in share/*vlc* share/*psf; do \
397                 cp $$file tmp/vlc/share ; done
398         # Build archives
399         F=vlc-${VERSION}; \
400         mv tmp/vlc tmp/$$F; (cd tmp ; \
401                 cd $$F && $(MAKE) distclean && cd .. ; \
402                 tar czf ../$$F.tar.gz $$F);
403         # Clean up
404         rm -Rf tmp
405
406 package-win32:
407         # XXX: this rule is probably only useful to you if you have exactly
408         # the same setup as me. Contact sam@zoy.org if you need to use it.
409         #
410         # Check that tmp isn't in the way
411         @if test -e tmp; then \
412                 echo "Error: please remove ./tmp, it is in the way"; false; \
413         else \
414                 echo "OK."; mkdir tmp; \
415         fi
416         # Create installation script
417         cp install-win32 tmp/nsi
418         # Copy relevant files
419         cp vlc.exe tmp/ 
420         $(STRIP) tmp/vlc.exe
421         cp INSTALL.win32 tmp/INSTALL.txt ; unix2dos tmp/INSTALL.txt
422         for file in AUTHORS COPYING ChangeLog README FAQ TODO ; \
423                         do cp $$file tmp/$${file}.txt ; \
424                         unix2dos tmp/$${file}.txt ; done
425         mkdir tmp/plugins
426         cp $(PLUGINS:%=plugins/%.so) tmp/plugins/ 
427         # don't include these two
428         #rm -f tmp/plugins/gtk.so tmp/plugins/sdl.so
429 ifneq (,$(PLUGINS))
430         for i in $(PLUGINS) ; do if test $$i != intfwin ; then $(STRIP) tmp/plugins/$$i.so ; fi ; done
431 endif
432         mkdir tmp/share
433         for file in default8x16.psf default8x9.psf ; \
434                 do cp share/$$file tmp/share/ ; done
435         # Create package 
436         wine ~/.wine/fake_windows/Program\ Files/NSIS/makensis.exe -- /DVERSION=${VERSION} /CD tmp/nsi
437         # Clean up
438         rm -Rf tmp
439
440 package-beos:
441         # Check that tmp isn't in the way
442         @if test -e tmp; then \
443                 echo "Error: please remove ./tmp, it is in the way"; false; \
444         else \
445                 echo "OK."; mkdir tmp; \
446         fi
447         
448         # Create dir
449         mkdir -p tmp/vlc/share
450         # Copy relevant files
451         cp vlc tmp/vlc/
452         strip tmp/vlc/vlc
453         cp AUTHORS COPYING ChangeLog README FAQ TODO tmp/vlc/
454         for file in default8x16.psf default8x9.psf ; \
455                 do cp share/$$file tmp/vlc/share/ ; done
456         mkdir tmp/vlc/plugins
457         cp $(PLUGINS:%=plugins/%.so) tmp/vlc/plugins/ 
458         strip $(PLUGINS:%=tmp/vlc/plugins/%.so)
459         # Create package 
460         mv tmp/vlc tmp/vlc-${VERSION}
461         (cd tmp ; find vlc-${VERSION} | \
462         zip -9 -@ vlc-${VERSION}-BeOS-x86.zip )
463         mv tmp/vlc-${VERSION}-BeOS-x86.zip .
464         # Clean up
465         rm -Rf tmp
466
467 package-macosx:
468         # Check that tmp isn't in the way
469         @if test -e tmp; then \
470                 echo "Error: please remove ./tmp, it is in the way"; false; \
471         else \
472                 echo "OK."; mkdir tmp; \
473         fi
474
475         # Copy relevant files 
476         cp -R vlc.app tmp/
477         cp AUTHORS COPYING ChangeLog README README.MacOSX.rtf FAQ TODO tmp/
478
479         # Create disk image 
480         ./macosx-dmg 0 "vlc-${VERSION}" tmp/* 
481
482         # Clean up
483         rm -Rf tmp
484
485 #
486 # Gtk/Gnome/* aliases and OS X application
487 #
488 gnome-vlc gvlc kvlc qvlc: vlc
489         rm -f $@ && ln -s vlc $@
490
491 .PHONY: vlc.app
492 vlc.app: vlc plugins
493 ifneq (,$(findstring darwin,$(SYS)))
494         rm -Rf vlc.app
495         cd extras/MacOSX ; pbxbuild | grep -v '^ ' | grep -v '^\t' | grep -v "^$$"
496         cp -r extras/MacOSX/build/vlc.bundle ./vlc.app
497         $(INSTALL) -d vlc.app/Contents/MacOS/share
498         $(INSTALL) -d vlc.app/Contents/MacOS/plugins
499         $(INSTALL) vlc vlc.app/Contents/MacOS/
500 ifneq (,$(PLUGINS))
501         $(INSTALL) $(PLUGINS:%=plugins/%.so) vlc.app/Contents/MacOS/plugins
502 endif
503         $(INSTALL) -m 644 share/*.psf vlc.app/Contents/MacOS/share
504 endif
505
506 FORCE:
507
508 #
509 # Generic rules (see below)
510 #
511 src/misc/modules_builtin.h: Makefile.opts Makefile
512         @echo "make[$(MAKELEVEL)]: Creating \`$@'"
513         @rm -f $@ && cp $@.in $@
514 ifneq (,$(BUILTINS))
515         @for i in $(BUILTINS) ; do \
516                 echo "int InitModule__MODULE_"$$i"( module_t* );" >>$@; \
517                 echo "int ActivateModule__MODULE_"$$i"( module_t* );" >>$@; \
518                 echo "int DeactivateModule__MODULE_"$$i"( module_t* );" >>$@; \
519         done
520         @echo "" >> $@ ;
521 endif
522         @echo "#define ALLOCATE_ALL_BUILTINS() \\" >> $@ ;
523         @echo "    do \\" >> $@ ;
524         @echo "    { \\" >> $@ ;
525 ifneq (,$(BUILTINS))
526         @for i in $(BUILTINS) ; do \
527                 echo "        ALLOCATE_BUILTIN("$$i"); \\" >> $@ ; \
528         done
529 endif
530         @echo "    } while( 0 );" >> $@ ;
531         @echo "" >> $@ ;
532
533 $(C_DEP): %.d: FORCE
534         @$(MAKE) -s --no-print-directory -f Makefile.dep $@
535
536 $(CPP_DEP): %.dpp: FORCE
537         @$(MAKE) -s --no-print-directory -f Makefile.dep $@
538
539 $(C_OBJ): %.o: Makefile.opts Makefile.dep Makefile
540 $(C_OBJ): %.o: $(H_OBJ)
541 $(C_OBJ): %.o: .dep/%.d
542 $(C_OBJ): %.o: %.c
543         $(CC) $(CFLAGS) $(vlc_CFLAGS) -c -o $@ $<
544
545 $(CPP_OBJ): %.o: Makefile.opts Makefile.dep Makefile
546 $(CPP_OBJ): %.o: $(H_OBJ)
547 $(CPP_OBJ): %.o: .dep/%.dpp
548 $(CPP_OBJ): %.o: %.cpp
549         $(CC) $(CFLAGS) $(vlc_CFLAGS) -c -o $@ $<
550
551 $(M_OBJ): %.o: Makefile.opts Makefile.dep Makefile
552 $(M_OBJ): %.o: $(H_OBJ)
553 $(M_OBJ): %.o: .dep/%.dm
554 $(M_OBJ): %.o: %.m
555         $(CC) $(CFLAGS) $(vlc_CFLAGS) -c -o $@ $<
556
557 $(RESOURCE_OBJ): %.o: Makefile.dep Makefile
558 ifneq (,(findstring mingw32,$(SYS)))
559 $(RESOURCE_OBJ): %.o: %.rc
560         $(WINDRES) -i $< -o $@
561 endif
562
563 #
564 # Main application target
565 #
566 vlc: Makefile.config Makefile.opts Makefile.dep Makefile $(VLC_OBJ) lib/libvlc.a $(BUILTIN_OBJ)
567         $(CC) $(CFLAGS) -o $@ $(VLC_OBJ) lib/libvlc.a $(BUILTIN_OBJ) $(LDFLAGS) $(vlc_LDFLAGS) $(builtins_LDFLAGS)
568 ifeq ($(SYS),beos)
569         xres -o $@ ./share/vlc_beos.rsrc
570         mimeset -f $@
571 endif
572
573 # here are the rules for a dynamic link of libvlc:
574 #vlc: Makefile.opts Makefile.dep Makefile $(VLC_OBJ) lib/libvlc.so $(BUILTIN_OBJ)
575 #       $(CC) $(CFLAGS) -o $@ $(VLC_OBJ) $(BUILTIN_OBJ) $(LDFLAGS) $(builtins_LDFLAGS) -L./lib -lvlc
576
577 #
578 # Main library target
579 #
580 lib/libvlc.a: Makefile.opts Makefile.dep Makefile $(LIBVLC_OBJ)
581         rm -f $@
582         ar rc $@ $(LIBVLC_OBJ)
583         $(RANLIB) $@
584
585 #lib/libvlc.so: Makefile.opts Makefile.dep Makefile $(LIBVLC_OBJ)
586 #       $(CC) -shared $(LIBVLC_OBJ) $(LDFLAGS) $(vlc_LDFLAGS) -o $@
587 #       chmod a-x $@
588
589 #
590 # Plugins target
591 #
592 plugins: Makefile.modules Makefile.opts Makefile.dep Makefile $(PLUGIN_OBJ)
593 $(PLUGIN_OBJ): $(H_OBJ) FORCE
594         @cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:plugins/%.so=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) -f ../../Makefile.modules $(@:plugins/%=../%)
595
596 #
597 # Built-in modules target
598 #
599 builtins: Makefile.modules Makefile.opts Makefile.dep Makefile $(BUILTIN_OBJ)
600 $(BUILTIN_OBJ): $(H_OBJ) FORCE
601         @cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:plugins/%.a=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) -f ../../Makefile.modules $(@:plugins/%=../%)
602
603 #
604 # gettext target
605 #
606 po: FORCE
607         @cd po && $(MAKE)
608