Add the bs build system from mpd-ke
Dealing with autotools is too painful when having to deal with multiple build environments and configurations. git-svn-id: https://svn.musicpd.org/mpd/trunk@7368 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
97698bd4aa
commit
8a4dff14ad
69
bs/README
Normal file
69
bs/README
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
bs - build system
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
bs is an attempt at a fast and reliable build system that will let
|
||||||
|
developers build mpd without having to deal with the complexity of
|
||||||
|
autotools. It is still a work in progress, but it seems to be
|
||||||
|
reasonably usable (to developers) and fast.
|
||||||
|
|
||||||
|
It is designed from the ground up to work with cross-compilation, as well as
|
||||||
|
multiple build targets/configurations from the same source tree (using the O
|
||||||
|
variable).
|
||||||
|
|
||||||
|
It is NOT intended to replace autotools for distribution maintainers
|
||||||
|
or end users who are satisfied with autotools.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
|
||||||
|
# To build mpd in a directory "output"
|
||||||
|
./build.mk O=output defconfig
|
||||||
|
$EDITOR output/config.mk
|
||||||
|
./build.mk O=output
|
||||||
|
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Designed for cross-compilation from the ground up
|
||||||
|
* Designed to easily handle multiple build directories from the same source
|
||||||
|
tree. Just set the O variable when invoking make (see synopsis).
|
||||||
|
* Automatic dependency analysis (if using GCC)
|
||||||
|
* Highly configurable (no auto-detection of dependencies to get wrong)
|
||||||
|
* Simple, no archaic M4 macros or unreadable auto-generated shell or makefiles
|
||||||
|
just human-maintained GNU Make and POSIX shell.
|
||||||
|
|
||||||
|
|
||||||
|
config.mk
|
||||||
|
---------
|
||||||
|
|
||||||
|
This is the configuration file a user should edit if they wish to
|
||||||
|
enable/disable features or tune settings. Once created, this
|
||||||
|
will NOT be modified by the build system, so user settings will
|
||||||
|
always be preserved.
|
||||||
|
|
||||||
|
|
||||||
|
VARIABLES
|
||||||
|
---------
|
||||||
|
|
||||||
|
These are conventions, not hard and fast rules (as there's no good way to
|
||||||
|
enforce them :)
|
||||||
|
mixed-case or lower-case variables are used by bs internally.
|
||||||
|
ALL_CAPS variables are designed to be changed by users.
|
||||||
|
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
------------
|
||||||
|
|
||||||
|
GNU Make, POSIX shell + common UNIX tools (awk, sed, mv, rm, mkdir).
|
||||||
|
git (version control system) is only required if you wish to autodownload
|
||||||
|
external dependencies (flac, tremor, mad, etc...) for static linking.
|
||||||
|
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
----
|
||||||
|
|
||||||
|
Modifications to config.mk will over-rebuild.
|
||||||
|
|
||||||
|
Changes to CFLAGS/LDFLAGS from the command-line are not yet checked in
|
||||||
|
rebuilds.
|
61
bs/config.mk.default
Normal file
61
bs/config.mk.default
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# config.mk file for the bs build-system this is the only file a user should
|
||||||
|
# need to edit
|
||||||
|
# report bugs to Eric Wong <normalperson@yhbt.net>
|
||||||
|
|
||||||
|
# change this if cross compiling, default: @@HOST@@
|
||||||
|
# HOST := @@HOST@@
|
||||||
|
|
||||||
|
# default compiler and linker settings
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS = -O2 -Wall \
|
||||||
|
-Wmissing-prototypes -Wextra -Wno-unused-parameter \
|
||||||
|
-Wno-deprecated-declarations -Wmissing-prototypes \
|
||||||
|
-Wdeclaration-after-statement -Wshadow
|
||||||
|
|
||||||
|
LDFLAGS = -Wl,-O1
|
||||||
|
|
||||||
|
# TCP or UNIX domain sockets support. MPD needs at least one of these
|
||||||
|
HAVE_TCP := 1
|
||||||
|
HAVE_UN :=
|
||||||
|
|
||||||
|
# miscellaneous dependencies and features, mpd does not
|
||||||
|
# require any of these:
|
||||||
|
#
|
||||||
|
HAVE_LANGINFO_CODESET :=
|
||||||
|
HAVE_IPV6 :=
|
||||||
|
HAVE_ICONV :=
|
||||||
|
HAVE_ID3TAG :=
|
||||||
|
|
||||||
|
MPD_PATH_MAX := 255
|
||||||
|
|
||||||
|
# audio output features, at least one of these must be defined to 1
|
||||||
|
# (and usable)
|
||||||
|
#
|
||||||
|
HAVE_ALSA :=
|
||||||
|
HAVE_AO :=
|
||||||
|
HAVE_FIFO :=
|
||||||
|
HAVE_JACK :=
|
||||||
|
HAVE_MVP :=
|
||||||
|
HAVE_NULL :=
|
||||||
|
HAVE_OSS :=
|
||||||
|
HAVE_OSX :=
|
||||||
|
HAVE_PULSE :=
|
||||||
|
HAVE_SHOUT :=
|
||||||
|
|
||||||
|
# input file format support, at least one of these must be defined to 1
|
||||||
|
# (and usable)
|
||||||
|
#
|
||||||
|
HAVE_AUDIOFILE :=
|
||||||
|
HAVE_FAAD :=
|
||||||
|
HAVE_FAACDECCONFIGURATION_DONTUPSAMPLEIMPLICITSBR :=
|
||||||
|
HAVE_FAACDECCONFIGURATION_DOWNMATRIX :=
|
||||||
|
HAVE_FAACDECFRAMEINFO_SAMPLERATE :=
|
||||||
|
HAVE_FLAC :=
|
||||||
|
HAVE_HELIXMP3 :=
|
||||||
|
HAVE_MIKMOD :=
|
||||||
|
HAVE_MAD :=
|
||||||
|
HAVE_MPCDEC :=
|
||||||
|
HAVE_OGGFLAC :=
|
||||||
|
HAVE_OGGVORBIS :=
|
||||||
|
HAVE_TREMOR :=
|
||||||
|
HAVE_WAVPACK :=
|
82
bs/cross-arch.sh
Executable file
82
bs/cross-arch.sh
Executable file
@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# many parts of this blatantly ripped from GNU Autoconf macros
|
||||||
|
# Use this for cross-compiling, as we can't run cross-compiled binaries
|
||||||
|
# on our host.
|
||||||
|
if test -z "$O" || ! cd "$O"; then
|
||||||
|
echo '$O= not defined or not a directory' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo '/* architecture-specific settings (auto-detected): */'
|
||||||
|
# check sizes of various types we care for
|
||||||
|
# this is slightly slower but much easier to read and follow than the
|
||||||
|
# bisecting autoconf version
|
||||||
|
for t in short int long 'long long'; do
|
||||||
|
> out
|
||||||
|
for s in 2 4 6 8 12 1 16 24 32 0; do
|
||||||
|
cat > t.c <<EOF
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
static int x[(long int)(sizeof($t)) == $s ? 1 : -1];
|
||||||
|
x[0] = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
echo "trying sizeof($t) == $s" >> out
|
||||||
|
$CC -o t.o $CFLAGS $CPPFLAGS t.c \
|
||||||
|
>> out 2>&1 && break
|
||||||
|
done
|
||||||
|
if test $s -eq 0; then
|
||||||
|
echo "Unable to calculate sizeof($t) for cross-compiling" >&2
|
||||||
|
cat out >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
t=`echo $t | tr a-z A-Z | tr ' ' _`
|
||||||
|
echo "#define SIZEOF_$t $s"
|
||||||
|
echo "SIZEOF_$t := $s" >> config_detected.mk
|
||||||
|
done
|
||||||
|
|
||||||
|
# check endian-ness
|
||||||
|
cat > t.c <<EOF
|
||||||
|
short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
|
||||||
|
short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
|
||||||
|
void _ascii(void)
|
||||||
|
{
|
||||||
|
char *s = (char *)ascii_mm;
|
||||||
|
s = (char *)ascii_ii;
|
||||||
|
}
|
||||||
|
|
||||||
|
short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
|
||||||
|
short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
|
||||||
|
void _ebcdic(void)
|
||||||
|
{
|
||||||
|
char *s = (char *)ebcdic_mm;
|
||||||
|
s = (char *)ebcdic_ii;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
_ascii();
|
||||||
|
_ebcdic();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "compiling endian test" > out
|
||||||
|
$CC -o t.o $CFLAGS $CPPFLAGS t.c >> out 2>&1
|
||||||
|
if grep BIGenDianSyS t.o >/dev/null 2>&1; then
|
||||||
|
echo "#define WORDS_BIGENDIAN 1"
|
||||||
|
echo "WORDS_BIGENDIAN := 1" >> config_detected.mk
|
||||||
|
elif grep LiTTleEnDian t.o >/dev/null 2>&1; then
|
||||||
|
echo "/* #undef WORDS_BIGENDIAN */"
|
||||||
|
echo "# WORDS_BIGENDIAN :=" >> config_detected.mk
|
||||||
|
else
|
||||||
|
echo "Unable to determine endian-ness for cross compiling" >&2
|
||||||
|
cat out >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ''
|
||||||
|
|
||||||
|
exec rm -f t.o out t.c
|
38
bs/deps-audio.mk
Normal file
38
bs/deps-audio.mk
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
ifeq ($(HAVE_ALSA),1)
|
||||||
|
mpd_CFLAGS += $(ALSA_CFLAGS) -DHAVE_LIBASOUND=1
|
||||||
|
mpd_LDFLAGS += $(ALSA_LDFLAGS) -lasound
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_AO),1)
|
||||||
|
# mpd_CFLAGS += -pthread
|
||||||
|
mpd_LDFLAGS += -lao -lpthread
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_FIFO),1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_JACK),1)
|
||||||
|
mpd_LDFLAGS += -ljack
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_MVP),1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_OSX),1)
|
||||||
|
mpd_LDFLAGS += -framework AudioUnit -framework CoreServices
|
||||||
|
endif
|
||||||
|
ifeq ($(HAVE_OSS),1)
|
||||||
|
# check some BSDs (-lossaudio?)
|
||||||
|
endif
|
||||||
|
ifeq ($(HAVE_PULSE),1)
|
||||||
|
mpd_LDFLAGS += -lpulse -lpulse-simple
|
||||||
|
endif
|
||||||
|
ifeq ($(HAVE_SHOUT),1)
|
||||||
|
mpd_CFLAGS += -DHAVE_SHOUT_SHOUT_H=1
|
||||||
|
# XXX -ltheora, -lspeex
|
||||||
|
mpd_LDFLAGS += -lshout -logg -lvorbis -lvorbisenc -ltheora -lspeex -lpthread
|
||||||
|
endif
|
||||||
|
ifeq ($(HAVE_SUN),1)
|
||||||
|
mpd_CFLAGS += $(SUN_CFLAGS)
|
||||||
|
mpd_LDFLAGS += $(SUN_LDFLAGS)
|
||||||
|
endif
|
14
bs/deps-conflicts.mk
Normal file
14
bs/deps-conflicts.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ifeq ($(HAVE_TREMOR),1)
|
||||||
|
ifeq ($(HAVE_SHOUT),1)
|
||||||
|
$(error Tremor and Shout are incompatible, enable one or the other)
|
||||||
|
endif
|
||||||
|
ifeq ($(HAVE_OGGFLAC),1)
|
||||||
|
$(error Tremor and OggFLAC are incompatible, enable one or the other)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_HELIXMP3),1)
|
||||||
|
ifeq ($(HAVE_MAD),1)
|
||||||
|
$(error Helix MP3 and MAD are incompatible, enable one or the other)
|
||||||
|
endif
|
||||||
|
endif
|
45
bs/deps-input.mk
Normal file
45
bs/deps-input.mk
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
ifeq ($(HAVE_AUDIOFILE),1)
|
||||||
|
mpd_LDFLAGS += -laudiofile -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_FAAD),1)
|
||||||
|
# XXX needs work
|
||||||
|
mpd_CFLAGS += $(FAAD_CFLAGS)
|
||||||
|
mpd_LDFLAGS += -lfaad -lmp4ff
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_FLAC),1)
|
||||||
|
mpd_LDFLAGS += -lFLAC -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_HELIXMP3),1)
|
||||||
|
mpd_CFLAGS += $(HELIXMP3_CFLAGS)
|
||||||
|
mpd_LDFLAGS += $(HELIXMP3_LDFLAGS) -lmp3codecfixpt
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_MIKMOD),1)
|
||||||
|
mpd_LDFLAGS += -lmikmod -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_MAD),1)
|
||||||
|
mpd_LDFLAGS += -lmad -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_MPCDEC),1)
|
||||||
|
mpd_LDFLAGS += -lmpcdec
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_OGGFLAC),1)
|
||||||
|
mpd_LDFLAGS += $(OGGFLAC_LDFLAGS) -lOggFLAC -logg -lFLAC -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_OGGVORBIS),1)
|
||||||
|
ifeq ($(HAVE_TREMOR),1)
|
||||||
|
mpd_LDFLAGS += $(TREMOR_LDFLAGS) -lvorbisidec
|
||||||
|
else
|
||||||
|
mpd_LDFLAGS += $(OGGVORBIS_LDFLAGS) -lvorbis -logg -lvorbisfile
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
17
bs/deps-misc.mk
Normal file
17
bs/deps-misc.mk
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
ifeq ($(HAVE_ID3TAG),1)
|
||||||
|
mpd_LDFLAGS += -lid3tag -lz
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_ICONV),1)
|
||||||
|
ifeq ($(NEED_LIBICONV),1)
|
||||||
|
mpd_LDFLAGS += -liconv
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_IPV6),1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_LANGINFO_CODESET),1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
mpd_LDFLAGS += -lpthread
|
88
bs/mkconfig-header.sh
Executable file
88
bs/mkconfig-header.sh
Executable file
@ -0,0 +1,88 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# detect the uninteresting (unlikely to be manually changed by the user)
|
||||||
|
# parts of config.h
|
||||||
|
|
||||||
|
if test -z "$O" || ! cd "$O"; then
|
||||||
|
echo '$O= not defined or not a directory' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
> config_detected.mk
|
||||||
|
|
||||||
|
ansi_headers='assert ctype errno limits locale math signal
|
||||||
|
stdarg stddef stdint stdio stdlib string'
|
||||||
|
common_headers='dlfcn inttypes memory strings sched
|
||||||
|
sys/inttypes sys/stat sys/types unistd'
|
||||||
|
|
||||||
|
all_ansi=t
|
||||||
|
echo '/* ANSI C headers: */'
|
||||||
|
for h in $ansi_headers; do
|
||||||
|
if test x$h = xlocale; then
|
||||||
|
H=HAVE_LOCALE
|
||||||
|
else
|
||||||
|
H="HAVE_`echo $h | tr a-z A-Z | tr / _`_H"
|
||||||
|
fi
|
||||||
|
cat > t.c <<EOF
|
||||||
|
#include <$h.h>
|
||||||
|
int main(void) { return 0; }
|
||||||
|
EOF
|
||||||
|
if $CC -o t.o $CFLAGS $CPPFLAGS t.c >> out 2>&1; then
|
||||||
|
echo "#define $H 1"
|
||||||
|
echo "$H := 1" >> config_detected.mk
|
||||||
|
else
|
||||||
|
echo "/* #undef $H */"
|
||||||
|
echo "# $H := " >> config_detected.mk
|
||||||
|
all_ansi=
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test x$all_ansi = xt; then
|
||||||
|
echo '#define STDC_HEADERS 1'
|
||||||
|
else
|
||||||
|
echo '/* #undef STDC_HEADERS */'
|
||||||
|
fi
|
||||||
|
echo ''
|
||||||
|
echo '/* common system headers/features on UNIX and UNIX-like system: */'
|
||||||
|
for h in $common_headers; do
|
||||||
|
H="HAVE_`echo $h | tr a-z A-Z | tr / _`_H"
|
||||||
|
cat > t.c <<EOF
|
||||||
|
#include <$h.h>
|
||||||
|
int main(void) { return 0; }
|
||||||
|
EOF
|
||||||
|
if $CC -o t.o $CFLAGS $CPPFLAGS t.c >> out 2>&1; then
|
||||||
|
echo "#define $H 1"
|
||||||
|
echo "$H := 1" >> config_detected.mk
|
||||||
|
else
|
||||||
|
echo "/* #undef $H */"
|
||||||
|
echo "# $H :=" >> config_detected.mk
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# test for setenv
|
||||||
|
cat > t.c <<EOF
|
||||||
|
#include <stdlib.h>
|
||||||
|
int main(void) { setenv("mpd","rocks", 1); return 0; }
|
||||||
|
EOF
|
||||||
|
if $CC -o t.o $CFLAGS $CPPFLAGS t.c >> out 2>&1; then
|
||||||
|
echo '#define HAVE_SETENV 1'
|
||||||
|
echo "HAVE_SETENV := 1" >> config_detected.mk
|
||||||
|
else
|
||||||
|
echo '/* #undef HAVE_SETENV */'
|
||||||
|
echo "# HAVE_SETENV :=" >> config_detected.mk
|
||||||
|
fi
|
||||||
|
echo ''
|
||||||
|
|
||||||
|
# test for alloca
|
||||||
|
cat > t.c <<EOF
|
||||||
|
#include <alloca.h>
|
||||||
|
int main(void) { char *x = (char *)alloca(2 * sizeof(int)); return 0; }
|
||||||
|
EOF
|
||||||
|
if $CC -o t.o $CFLAGS $CPPFLAGS t.c >> out 2>&1; then
|
||||||
|
echo '#define HAVE_ALLOCA_H 1'
|
||||||
|
echo "HAVE_ALLOCA_H := 1" >> config_detected.mk
|
||||||
|
else
|
||||||
|
echo '/* #undef HAVE_ALLOCA_H */'
|
||||||
|
echo "# HAVE_ALLOCA_H :=" >> config_detected.mk
|
||||||
|
fi
|
||||||
|
echo ''
|
||||||
|
|
||||||
|
exec rm -f out t.c t.o
|
54
bs/mkconfig.h.mk
Normal file
54
bs/mkconfig.h.mk
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
have += TCP
|
||||||
|
have += UN
|
||||||
|
|
||||||
|
have += AUDIOFILE
|
||||||
|
have += FAAD
|
||||||
|
have += FAACDECCONFIGURATION_DONTUPSAMPLEIMPLICITSBR
|
||||||
|
have += FAACDECCONFIGURATION_DOWNMATRIX
|
||||||
|
have += FAACDECFRAMEINFO_SAMPLERATE
|
||||||
|
have += MP4AUDIOSPECIFICCONFIG
|
||||||
|
have += FLAC
|
||||||
|
have += HELIXMP3
|
||||||
|
have += MIKMOD
|
||||||
|
have += MAD
|
||||||
|
have += MPCDEC
|
||||||
|
have += OGGFLAC
|
||||||
|
have += OGGVORBIS
|
||||||
|
have += TREMOR
|
||||||
|
|
||||||
|
have += ALSA
|
||||||
|
have += AO
|
||||||
|
have += FIFO
|
||||||
|
have += JACK
|
||||||
|
have += MVP
|
||||||
|
have += OSX
|
||||||
|
have += OSS
|
||||||
|
have += PULSE
|
||||||
|
have += SHOUT
|
||||||
|
have += SUN
|
||||||
|
|
||||||
|
have += ID3TAG
|
||||||
|
have += ICONV
|
||||||
|
have += IPV6
|
||||||
|
have += LANGINFO_CODESET
|
||||||
|
|
||||||
|
MPD_PATH_MAX ?= 255
|
||||||
|
req_vars += MPD_PATH_MAX
|
||||||
|
|
||||||
|
export
|
||||||
|
|
||||||
|
include $(O)/config.mk
|
||||||
|
$(O)/config.h: $(O)/config_detected.h $(O)/config.mk
|
||||||
|
echo '#ifndef CONFIG_H' > $@+
|
||||||
|
echo '#define CONFIG_H' >> $@+
|
||||||
|
$(SHELL) ./bs/pkginfo-header.sh >> $@+
|
||||||
|
cat $(O)/config_detected.h >> $@+
|
||||||
|
echo '/* user-enabled features: */' >> $@+
|
||||||
|
for d in $(have); do eval "val=`echo '$$'HAVE_$$d` var=HAVE_$$d"; \
|
||||||
|
if test -n "$$val"; then echo "#define $$var 1" >> $@+; \
|
||||||
|
else echo "/* #undef $$var */" >> $@+; fi ; done
|
||||||
|
for d in $(req_vars); do eval "val=`echo '$$'$$d`"; \
|
||||||
|
echo "#define $$d $$val" >> $@+; done
|
||||||
|
echo '#endif /* CONFIG_H */' >> $@+
|
||||||
|
mv $@+ $@
|
||||||
|
.NOTPARALLEL:
|
58
bs/mkdep.sh
Executable file
58
bs/mkdep.sh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# $d must have a trailing slash $(dir file) in GNU Make
|
||||||
|
f="$1"
|
||||||
|
d="$2"
|
||||||
|
x="$3"
|
||||||
|
if test -z "$O"; then
|
||||||
|
echo '$O= not defined or not a directory' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
test -d "$O/$d" || "$SHELL" ./bs/mkdir_p.sh "$O/$d"
|
||||||
|
t="$O/t.$$.d"
|
||||||
|
depmode=
|
||||||
|
out=
|
||||||
|
if test -e "$O/depmode"; then
|
||||||
|
. "$O/depmode"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$depmode" in
|
||||||
|
mm)
|
||||||
|
$CC -MM $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
|
||||||
|
;;
|
||||||
|
m)
|
||||||
|
$CC -M $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
|
||||||
|
;;
|
||||||
|
none)
|
||||||
|
echo "$O/$f: $f $HDR_DEP_HACK" | sed -e 's#c:#o:#' > "$x"+
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# detect our depmode
|
||||||
|
# -MM is gcc-specific...
|
||||||
|
$CC -MM $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
|
||||||
|
if test $? -eq 0; then
|
||||||
|
depmode=mm
|
||||||
|
else
|
||||||
|
# ok, maybe -M is supported...
|
||||||
|
$CC -M $CPPFLAGS $CFLAGS "$f" \
|
||||||
|
> "$t" 2>/dev/null
|
||||||
|
if test $? -eq 0; then
|
||||||
|
depmode=m
|
||||||
|
else
|
||||||
|
depmode=none
|
||||||
|
# don't guess, fudge the dependencies by using
|
||||||
|
# all headers
|
||||||
|
echo "$O/$f: $f $HDR_DEP_HACK" \
|
||||||
|
| sed -e 's#c:#o:#' > "$x"+
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "depmode=$depmode" > "$O/depmode"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$depmode" in
|
||||||
|
m|mm)
|
||||||
|
sed -e 's#.c$#.o#' -e "1s#^#$O/$d&#" < "$t" > "$x"+
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
rm -f "$t"
|
||||||
|
exec mv "$x"+ "$x"
|
37
bs/mkdir_p.sh
Executable file
37
bs/mkdir_p.sh
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# based on mkinstalldirs:
|
||||||
|
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||||
|
# Created: 1993-05-16
|
||||||
|
# Public domain.
|
||||||
|
errstatus=0
|
||||||
|
for file
|
||||||
|
do
|
||||||
|
test -d "$file" && continue
|
||||||
|
case $file in
|
||||||
|
/*) pathcomp=/ ;;
|
||||||
|
*) pathcomp= ;;
|
||||||
|
esac
|
||||||
|
oIFS=$IFS
|
||||||
|
IFS=/
|
||||||
|
set fnord $file
|
||||||
|
shift
|
||||||
|
IFS=$oIFS
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
test "x$d" = x && continue
|
||||||
|
pathcomp=$pathcomp$d
|
||||||
|
case $pathcomp in
|
||||||
|
-*) pathcomp=./$pathcomp ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test ! -d "$pathcomp"; then
|
||||||
|
mkdir "$pathcomp" || lasterr=$?
|
||||||
|
if test ! -d "$pathcomp"; then
|
||||||
|
errstatus=$lasterr
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
pathcomp=$pathcomp/
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $errstatus
|
50
bs/mkdist.sh
Executable file
50
bs/mkdist.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
. bs/pkginfo.sh
|
||||||
|
head=${1-'HEAD'}
|
||||||
|
git_ver=
|
||||||
|
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||||
|
git_ver=`git describe $head`
|
||||||
|
git_ver=`expr "z$git_ver" : 'z.*\(-g[0-9a-f].*\)' || true`
|
||||||
|
if test -n "$git_ver"; then
|
||||||
|
dirty=`git diff-index --name-only HEAD 2>/dev/null || true`
|
||||||
|
if test -n "$dirty"; then
|
||||||
|
git_ver=$git_ver-dirty
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
v=$v$git_ver
|
||||||
|
dir=$O/$p-$v
|
||||||
|
rm -rf "$dir"
|
||||||
|
git tar-tree $head $dir | tar x
|
||||||
|
|
||||||
|
at_files='
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
compile
|
||||||
|
config.guess
|
||||||
|
config.h.in
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
depcomp
|
||||||
|
doc/Makefile.in
|
||||||
|
install-sh
|
||||||
|
ltmain.sh
|
||||||
|
missing
|
||||||
|
mkinstalldirs
|
||||||
|
src/Makefile.in
|
||||||
|
src/mp4ff/Makefile.in
|
||||||
|
'
|
||||||
|
|
||||||
|
for i in $at_files; do
|
||||||
|
if test -f $i; then
|
||||||
|
echo cp $i $dir/$i
|
||||||
|
cp $i $dir/$i
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
cd $O
|
||||||
|
tar c $p-$v | gzip -9 > $p-$v.tar.gz
|
||||||
|
rm -rf $p-$v
|
||||||
|
echo "Generated tarball in: $p-$v.tar.gz"
|
16
bs/pkginfo-header.sh
Executable file
16
bs/pkginfo-header.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# basic package info:
|
||||||
|
. bs/pkginfo.sh
|
||||||
|
cat <<EOF
|
||||||
|
/* Basic package info: */
|
||||||
|
#define PACKAGE "$p"
|
||||||
|
#define VERSION "$v"
|
||||||
|
#define PACKAGE_BUGREPORT "$b"
|
||||||
|
#define PACKAGE_NAME "$p"
|
||||||
|
#define PACKAGE_STRING "$p $v"
|
||||||
|
#define PACKAGE_TARNAME "$p"
|
||||||
|
#define PACKAGE_VERSION "$v"
|
||||||
|
#define PROTOCOL_VERSION "$pv"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
19
bs/pkginfo.sh
Executable file
19
bs/pkginfo.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# sourcing this defines the folling variables:
|
||||||
|
# p: package, v: version, b: bugreport email, pv: protocol version
|
||||||
|
|
||||||
|
script='
|
||||||
|
/^AC_INIT\(/ {
|
||||||
|
gsub("[() ]","",$0);
|
||||||
|
gsub("AC_INIT","",$1);
|
||||||
|
print "p="$1;
|
||||||
|
print "v="$2;
|
||||||
|
print "b="$3;
|
||||||
|
}
|
||||||
|
/^AC_DEFINE\(PROTOCOL_VERSION, / {
|
||||||
|
gsub("[\" ]", "", $2);
|
||||||
|
print "pv="$2;
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
||||||
|
eval $(awk -F, "$script" < configure.ac)
|
103
build.mk
Executable file
103
build.mk
Executable file
@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
# default target
|
||||||
|
all:
|
||||||
|
|
||||||
|
# output directory can be set with O:=dir
|
||||||
|
ifeq ($(O),)
|
||||||
|
O := .
|
||||||
|
endif
|
||||||
|
srcdir := src
|
||||||
|
include src/Makefile.am
|
||||||
|
mpd_SRC := $(addprefix src/,$(filter %.c,$(mpd_SOURCES)))
|
||||||
|
mpd_HDR := $(addprefix src/,$(filter %.h,$(mpd_SOURCES)))
|
||||||
|
mpd_OBJ := $(subst .c,.o,$(addprefix $(O)/,$(mpd_SRC)))
|
||||||
|
mpd_DEP := $(subst .o,.d,$(mpd_OBJ))
|
||||||
|
|
||||||
|
-include $(mpd_DEP)
|
||||||
|
|
||||||
|
uname_s := $(shell uname -s | tr A-Z a-z 2>/dev/null || echo unknown)
|
||||||
|
uname_m := $(shell uname -m | tr A-Z a-z 2>/dev/null || echo unknown)
|
||||||
|
|
||||||
|
# build: the machine type this builds on
|
||||||
|
# HOST: the machine this runs on
|
||||||
|
build := $(uname_s)-$(uname_m)
|
||||||
|
HOST ?= $(build)
|
||||||
|
-include $(O)/config.mk
|
||||||
|
-include $(O)/config_detected.mk
|
||||||
|
include bs/deps-audio.mk
|
||||||
|
include bs/deps-input.mk
|
||||||
|
include bs/deps-misc.mk
|
||||||
|
include bs/deps-conflicts.mk
|
||||||
|
|
||||||
|
RANLIB ?= ranlib
|
||||||
|
ifneq ($(HOST),$(build))
|
||||||
|
ifeq ($(origin CC),default)
|
||||||
|
CC := $(HOST)-$(CC)
|
||||||
|
endif
|
||||||
|
ifeq ($(origin RANLIB),default)
|
||||||
|
RANLIB := $(HOST)-$(RANLIB)
|
||||||
|
endif
|
||||||
|
ifeq ($(origin AR),default)
|
||||||
|
AR := $(HOST)-$(AR)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
mpd_CFLAGS += -I$(O)/src
|
||||||
|
mpd_LDFLAGS += -lm
|
||||||
|
mpd_DIRS := $(O)/src/inputPlugins $(O)/src/audioOutputs
|
||||||
|
|
||||||
|
STRIP ?= strip
|
||||||
|
export O CC CPPFLAGS CFLAGS HOST SHELL
|
||||||
|
|
||||||
|
defconfig: $(O)/config.mk
|
||||||
|
|
||||||
|
$(O)/config.mk:
|
||||||
|
@test -d "$(@D)" || $(SHELL) ./bs/mkdir_p.sh "$(@D)"
|
||||||
|
@if ! test -e $@; then \
|
||||||
|
sed -e 's/@@HOST@@/$(HOST)/g' \
|
||||||
|
< bs/config.mk.default > $@+ && mv $@+ $@ && \
|
||||||
|
echo Please edit $(O)/config.mk to your liking; fi
|
||||||
|
@touch $@
|
||||||
|
|
||||||
|
$(O)/src/../config.h: $(O)/config.h
|
||||||
|
$(O)/config.h: $(O)/config.mk $(O)/config_detected.h
|
||||||
|
$(MAKE) -f bs/mkconfig.h.mk $(O)/config.h
|
||||||
|
|
||||||
|
$(O)/config_detected.h:
|
||||||
|
@test -d "$(@D)" || $(SHELL) ./bs/mkdir_p.sh "$(@D)"
|
||||||
|
> $@+ && $(SHELL) ./bs/mkconfig-header.sh >> $@+ && \
|
||||||
|
$(SHELL) ./bs/cross-arch.sh >> $@+ && mv $@+ $@
|
||||||
|
|
||||||
|
all: $(O)/src/mpd
|
||||||
|
@echo OK $<
|
||||||
|
strip: $(O)/src/mpd
|
||||||
|
$(STRIP) $(STRIP_OPTS) $<
|
||||||
|
$(O)/src/mpd: $(mpd_OBJ)
|
||||||
|
$(CC) -o $@ $^ $(CFLAGS) $(mpd_CFLAGS) $(LDFLAGS) $(mpd_LDFLAGS)
|
||||||
|
$(O)/src/%.o: src/%.c $(O)/config.h
|
||||||
|
@HDR_DEP_HACK="$(O)/config.h $(mpd_HDR)" \
|
||||||
|
CFLAGS="$(CFLAGS) $(mpd_CFLAGS)" \
|
||||||
|
$(SHELL) ./bs/mkdep.sh $< $(dir $<) $(subst .o,.d,$@)
|
||||||
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(mpd_CFLAGS) -c -o $@ $<
|
||||||
|
$(mpd_SRC): $(O)/config.h
|
||||||
|
clean:
|
||||||
|
$(RM) $(O)/src/mpd $(mpd_OBJ)
|
||||||
|
reallyclean: clean
|
||||||
|
$(RM) $(mpd_DEP) $(O)/depmode $(O)/config.h
|
||||||
|
|
||||||
|
# in case a .d file had a dep on a deleted file, we have this:
|
||||||
|
src/%.h src/%.c::
|
||||||
|
@true
|
||||||
|
# we only do static linking in bs (since our main goal is cross-compiling),
|
||||||
|
# if you want dynamic linking, use autotools
|
||||||
|
$(O)/%.a::
|
||||||
|
$(RM) $@
|
||||||
|
$(AR) cru $@ $^
|
||||||
|
$(RANLIB) $@
|
||||||
|
dist:
|
||||||
|
$(SHELL) ./bs/mkdist.sh
|
||||||
|
|
||||||
|
.PHONY: clean reallyclean defconfig all
|
||||||
|
.PRECIOUS: $(O)/%.h
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .c .o .h .d
|
Loading…
Reference in New Issue
Block a user