AC_HEADER_STDC
AC_CHECK_HEADERS([sys/mman.h])
gl_INIT
-AC_CHECK_FUNCS([symlink])
+AC_CHECK_FUNCS([symlink chroot])
AM_PROG_LIBTOOL
AC_PROG_MAKE_SET
AC_PROG_LN_S
AC_SYS_LARGEFILE
AM_PROG_CC_C_O
+AC_MSG_CHECKING([for Microsoft Windows native API])
+case $host_os in
+ *mingw*) AC_DEFINE([MSWIN_API], 1,
+ [Define to 1 to use Microsoft Windows native API.])
+ mswin_api=yes;;
+ *) mswin_api=no;;
+esac
+AC_MSG_RESULT([$mswin_api])
+AM_CONDITIONAL(MSWIN_API, test "$mswin_api" = "yes")
+
# Taken from dbus
AC_ARG_ENABLE(ansi, [ --enable-ansi enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
AC_ARG_ENABLE(verbose-mode, [ --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
run_script(struct installer *installer,
unsigned int program_tag, unsigned int script_tag)
{
+#if HAVE_CHROOT
int pid, status, fd[2];
+#else
+ FILE *fp;
+#endif
const char *script = NULL, *program = NULL;
program = razor_rpm_get_indirect(installer->rpm, program_tag, NULL);
if (program == NULL && script == NULL) {
return 0;
} else if (program == NULL) {
+#if MSWIN_API
+ program = getenv("COMSPEC");
+ if (program) {
+ program = strchr(program, '=');
+ if (program)
+ program++;
+ }
+ if (!program)
+ program = "c:\\windows\\system32\\cmd.exe";
+#else
program = "/bin/sh";
+#endif
}
+#if HAVE_CHROOT
if (pipe(fd) < 0) {
fprintf(stderr, "failed to create pipe\n");
return -1;
if (status)
printf("script exited with status %d\n", status);
}
+#else
+ fp = popen(program, "w");
+ if (fwrite(script, strlen(script), 1, fp) != 1) {
+ fprintf(stderr, "failed to pipe script, %m\n");
+ return -1;
+ }
+ pclose(fp);
+#endif
return 0;
}