Description: Fix cross builds
 Set the CC detected in configure in the generated makefile.
 Thanks to Helmut Grohne <helmut@subdivi.de>.
 .
 Set CROSS_BUILDING at configure time.
 Set CC_FOR_BUILD and LDFLAGS_FOR_BUILD in configure and use it in the
 makefile to build any tool executed at build time.
 When cross-building build another arj program for the build architecture.
 .
 Set ALL_CFLAGS_FOR_BUILD, COPT_FOR_BUILD, STD_COPT_FOR_BUILD and
 ARJ_COPT_FOR_BUILD in makefile to build any tool executed at build time.
 Set OS_DEF_FOR_BUILD in configure and use it in the makefile to build any
 tool executed at build time.
 Thanks to Helmut Grohne <helmut@subdivi.de>.
Author: Guillem Jover <guillem@debian.org>
Origin: vendor
Forwarded: no
Bug-Debian: 875567
Last-Update: 2014-10-02

---
 gnu/configure.in |   22 +++++++++++++++++++
 gnu/makefile.in  |   63 +++++++++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 74 insertions(+), 11 deletions(-)

--- a/gnu/makefile.in
+++ b/gnu/makefile.in
@@ -13,9 +13,12 @@ SHELL = @CONFIG_SHELL@
 DYN_LIBS = @DYN_LIBS@
 LIBS = @LIBS@
 REGISTER = @REGISTER@
+CROSS_BUILDING = @CROSS_BUILDING@
 
 # Programs
 
+CC = @CC@
+CC_FOR_BUILD = @CC_FOR_BUILD@
 INSTALL = @INSTALL@
 INSTALL_DIR = @INSTALL@ -d -m 755
 INSTALL_DATA = @INSTALL_DATA@
@@ -38,8 +41,14 @@ ifndef LOCALE
 LOCALE = en
 endif
 
-ALL_CFLAGS = -DLOCALE=LANG_$(LOCALE) -DLOCALE_DESC="\"$(LOCALE)\"" \
-	     -DPKGLIBDIR="\"$(pkglibdir)\"" @OS_DEF@
+COMMON_CFLAGS = \
+	-DLOCALE=LANG_$(LOCALE) \
+	-DLOCALE_DESC="\"$(LOCALE)\"" \
+	-DPKGLIBDIR="\"$(pkglibdir)\"" \
+	# EOL
+
+ALL_CFLAGS = $(COMMON_CFLAGS) @OS_DEF@
+ALL_CFLAGS_FOR_BUILD = $(COMMON_CFLAGS) @OS_DEF_FOR_BUILD@
 
 ifndef COMMERCIAL
 PACKAGE = s
@@ -56,7 +65,7 @@ DEBUG_SM = r
 endif
 
 ifdef BUILD_STRIP
-STRIP = strip --strip-unneeded --remove-section=.comment --remove-section=.note
+STRIP = @STRIP@ --strip-unneeded --remove-section=.comment --remove-section=.note
 else
 STRIP = :
 endif
@@ -64,6 +73,7 @@ endif
 ARJ_TIMESTAMP = $(shell TZ=UTC0 date -d '@$(SOURCE_DATE_EPOCH)' '+%Y%m%d%H%S')
 
 ALL_CFLAGS += @CPPFLAGS@ $(CPPFLAGS) @CFLAGS@ $(CFLAGS)
+ALL_CFLAGS_FOR_BUILD += $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD)
 
 # Build Installation paths
 
@@ -75,6 +85,9 @@ RESFILE = $(RES_DIR)/resource.txt
 
 TOOLS_DIR = $(BASEDIR)/tools
 ARJ_DIR = $(BASEDIR)/arj
+ifdef CROSS_BUILDING
+ARJ_FOR_BUILD_DIR = $(BASEDIR)/arj-for-build
+endif
 ARJSFXV_DIR = $(BASEDIR)/arjsfxv
 ARJSFX_DIR = $(BASEDIR)/arjsfx
 ARJSFXJR_DIR = $(BASEDIR)/arjsfxjr
@@ -87,13 +100,18 @@ SFXSTUB_DIR = $(BASEDIR)/sfxstub
 # Definitions for compiling submodules
 
 LDFLAGS = @LDFLAGS@ $(ADD_LDFLAGS)
+LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
 DLL_FLAGS = $(LDFLAGS) @DLL_FLAGS@
 DLL_CFLAGS = @DLL_CFLAGS@
 REQUIRES_DEF = @REQUIRES_DEF@
 
-COPT = -c -I@OUT_DIR@ -I$(BASEDIR) -I$(SRC_DIR) $(ALL_CFLAGS)
+COPT_COMMON = -c -I@OUT_DIR@ -I$(BASEDIR) -I$(SRC_DIR)
+COPT = $(COPT_COMMON) $(ALL_CFLAGS)
+COPT_FOR_BUILD = $(COPT_COMMON) $(ALL_CFLAGS_FOR_BUILD)
 STD_COPT = -DARJUTIL $(COPT)
+STD_COPT_FOR_BUILD = -DARJUTIL $(COPT_FOR_BUILD)
 ARJ_COPT = -DSFL=4 $(COPT)
+ARJ_COPT_FOR_BUILD = -DSFL=4 $(COPT_FOR_BUILD)
 ARJSFXV_COPT = -DSFL=3 $(COPT)
 ARJSFX_COPT = -DSFL=2 $(COPT)
 ARJSFXJR_COPT = -DSFL=1 $(COPT)
@@ -108,6 +126,11 @@ SFXSTUB_COPT = -DSFXSTUB $(COPT)
 $(ARJ_DIR)/%.o: $(BASEDIR)/%.c
 	$(CC) $(COPT) -o$@ $<
 
+ifdef CROSS_BUILDING
+$(ARJ_FOR_BUILD_DIR)/%.o: $(BASEDIR)/%.c
+	$(CC_FOR_BUILD) $(COPT_FOR_BUILD) -o$@ $<
+endif
+
 $(ARJSFX_DIR)/%.o: $(BASEDIR)/%.c
 	$(CC) $(COPT) -o$@ $<
 
@@ -133,11 +156,16 @@ $(ARJDISP_DIR)/%.o: $(BASEDIR)/%.c
 	$(CC) $(COPT) -o$@ $<
 
 $(TOOLS_DIR)/%.o: $(SRC_DIR)/%.c
-	$(CC) $(STD_COPT) -o$@ $<
+	$(CC_FOR_BUILD) $(STD_COPT_FOR_BUILD) -o$@ $<
 
 $(ARJ_DIR)/%.o: $(SRC_DIR)/%.c
 	$(CC) $(ARJ_COPT) -o$@ $<
 
+ifdef CROSS_BUILDING
+$(ARJ_FOR_BUILD_DIR)/%.o: $(SRC_DIR)/%.c
+	$(CC_FOR_BUILD) $(ARJ_COPT_FOR_BUILD) -o$@ $<
+endif
+
 $(ARJSFXV_DIR)/%.o: $(SRC_DIR)/%.c
 	$(CC) $(ARJSFXV_COPT) -o$@ $<
 
@@ -227,19 +255,19 @@ PACKAGER_OBJS = $(patsubst %,$(TOOLS_DIR
 		filemode.o packager.o arjdata.o)
 
 $(TOOLS_DIR)/msgbind$x: $(MSGBIND_OBJS)
-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(MSGBIND_OBJS) $(LIBS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(MSGBIND_OBJS) $(LIBS)
 
 $(TOOLS_DIR)/make_key$x: $(MAKE_KEY_OBJS)
-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(MAKE_KEY_OBJS) $(LIBS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(MAKE_KEY_OBJS) $(LIBS)
 
 $(TOOLS_DIR)/postproc$x: $(POSTPROC_OBJS)
-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(POSTPROC_OBJS) $(LIBS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(POSTPROC_OBJS) $(LIBS)
 
 $(TOOLS_DIR)/join$x: $(JOIN_OBJS)
-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JOIN_OBJS) $(LIBS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(JOIN_OBJS) $(LIBS)
 
 $(TOOLS_DIR)/packager$x: $(PACKAGER_OBJS)
-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(PACKAGER_OBJS) $(LIBS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(PACKAGER_OBJS) $(LIBS)
 
 # And this one explicitly specifies that chk_fmsg depends on individual files
 $(ARJ_DIR)/chk_fmsg.o: $(SRC_DIR)/chk_fmsg.c $(BASEDIR)/fmsg_arj.c
@@ -350,7 +378,19 @@ ARJ_OBJS = $(patsubst %,$(ARJ_DIR)/%, \
 	   crc16tab.o recovery.o gost.o gost40.o gost_t.o \
 	   externs.o)
 
+ifdef CROSS_BUILDING
+ARJ_FOR_BUILD_PROG = $(ARJ_FOR_BUILD_DIR)/arj$x
+ARJ_FOR_BUILD_OBJS = $(patsubst $(ARJ_DIR)/%,$(ARJ_FOR_BUILD_DIR)/%,$(ARJ_OBJS))
+ARJ_FOR_BUILD_DEP = $(ARJ_FOR_BUILD_PROG)
+
+$(ARJ_FOR_BUILD_DIR)/arj$x: $(ARJ_FOR_BUILD_OBJS)
+	$(CC_FOR_BUILD) $(ALL_CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(ARJ_FOR_BUILD_OBJS) $(LIBS) $(DYN_LIBS)
+else
+ARJ_FOR_BUILD_PROG = $(ARJ_DIR)/arj$x
+endif
+
 $(ARJ_DIR)/arj$x: $(ARJ_OBJS) \
+		  $(ARJ_FOR_BUILD_DEP) \
 		  $(RES_DIR)/$(LOCALE)/arjl.txt $(RES_DIR)/$(LOCALE)/arjs.txt \
 		  $(TOOLS_DIR)/join$x \
 		  $(TOOLS_DIR)/postproc$x \
@@ -365,7 +405,7 @@ $(ARJ_DIR)/arj$x: $(ARJ_OBJS) \
 	$(TOOLS_DIR)/join $(ARJ_DIR)/arj$x $(ARJSFXV_DIR)/arjsfxv$x
 	$(TOOLS_DIR)/join $(ARJ_DIR)/arj$x $(SFXSTUB_DIR)/sfxstub$x
 	rm -f $(BASEDIR)/help.arj
-	TZ=UTC0 $(ARJ_DIR)/arj$x a $(BASEDIR)/help.arj -+ -t1f -2d -e -jm -jh65535 -jt -hdo$(ARJ_TIMESTAMP) $(RES_DIR)/$(LOCALE)/arj?.txt
+	TZ=UTC0 $(ARJ_FOR_BUILD_PROG) a $(BASEDIR)/help.arj -+ -t1f -2d -e -jm -jh65535 -jt -hdo$(ARJ_TIMESTAMP) $(RES_DIR)/$(LOCALE)/arj?.txt
 	$(TOOLS_DIR)/join $(ARJ_DIR)/arj$x $(BASEDIR)/help.arj
 	$(TOOLS_DIR)/postproc $@
 
@@ -440,6 +480,7 @@ prepare:
 	-mkdir -p $(ARJSFX_DIR)
 	-mkdir -p $(ARJSFXJR_DIR)
 	-mkdir -p $(ARJ_DIR)
+	-mkdir -p $(ARJ_FOR_BUILD_DIR)
 	-mkdir -p $(REARJ_DIR)
 	-mkdir -p $(REGISTER_DIR)
 	-mkdir -p $(ARJDISP_DIR)
--- a/gnu/configure.in
+++ b/gnu/configure.in
@@ -16,9 +16,15 @@ AC_CONFIG_HEADER([../c_defs.h:config.h.i
 
 dnl Checks for the canonical system name
 AC_CANONICAL_HOST
+AS_IF([test "$host" != "$build"], [
+  AC_SUBST([CROSS_BUILDING], [yes])
+])
+CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
+AC_SUBST([CC_FOR_BUILD])
 
 dnl Checks for programs.
 AC_PROG_CC
+AC_CHECK_TOOL([STRIP], [strip])
 
 dnl Checks for header files.
 AC_HEADER_STDC
@@ -90,6 +96,17 @@ os2*)
 	OS_DEF="-D_OS2"
 	;;
 esac
+AC_SUBST([LDFLAGS_FOR_BUILD])
+
+OS_DEF_FOR_BUILD="-D_UNIX"
+case $build_os in
+gnu*|linux*|*bsd*|interix3*|*qnx*|*solaris*)
+	;;
+os2*)
+	LDFLAGS_FOR_BUILD="-s"
+	OS_DEF_FOR_BUILD="-D_OS2"
+	;;
+esac
 
 case $host_cpu in
 alpha*)
@@ -135,6 +152,10 @@ AC_ARG_ENABLE(libc,
 		LDFLAGS="-Zcrtdll $LDFLAGS"
 		DLL_FLAGS="-Zcrtdll $DLL_FLAGS"
 	 esac
+	 case $build_os in
+	 os2*)
+		LDFLAGS_FOR_BUILD="-Zcrtdll $LDFLAGS_FOR_BUILD"
+	 esac
 	])
 AC_MSG_RESULT($enable_libc)
 test "$enable_libc" != "no" && AC_DEFINE(LIBC, 1, [Define if dynamic C library may be used])
@@ -191,6 +212,7 @@ AC_SUBST(DLL_CFLAGS)
 AC_SUBST(REQUIRES_DEF)
 AC_SUBST(OS_ID)
 AC_SUBST(OS_DEF)
+AC_SUBST(OS_DEF_FOR_BUILD)
 AC_SUBST(LIBS)
 AC_SUBST(DYN_LIBS)
 AC_SUBST(LD_STRIP)
