summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2016-05-24 12:15:03 -0700
committerAaron Plattner <aplattner@nvidia.com>2016-05-24 12:15:03 -0700
commitbbd39fb5ae11ef5ad74cd8f82df8159661dbc629 (patch)
tree69987fe551965a9470b073ca83f2aad2ced614a1
parentf2ded4a07c2deb64c5e6b9956a6cd74584aef109 (diff)
367.18367.18
-rw-r--r--Makefile32
-rw-r--r--files.c7
-rw-r--r--manifest.c2
-rw-r--r--misc.c25
-rw-r--r--nvidia-installer.c3
-rw-r--r--nvidia-installer.h8
-rw-r--r--user-interface.c84
-rw-r--r--utils.mk6
-rw-r--r--version.mk2
9 files changed, 115 insertions, 54 deletions
diff --git a/Makefile b/Makefile
index ff33c03..28471eb 100644
--- a/Makefile
+++ b/Makefile
@@ -36,9 +36,12 @@ include utils.mk
NCURSES_CFLAGS ?=
NCURSES_LDFLAGS ?=
+NCURSES6_CFLAGS ?=
+NCURSES6_LDFLAGS ?=
PCIACCESS_CFLAGS ?=
PCIACCESS_LDFLAGS ?=
+BUILD_NCURSES6 = $(if $(NCURSES6_CFLAGS)$(NCURSES6_LDFLAGS),1,)
##############################################################################
# assign variables
@@ -61,8 +64,12 @@ else
endif
NCURSES_UI_C = ncurses-ui.c
+NCURSES_UI_O = $(call BUILD_OBJECT_LIST,$(NCURSES_UI_C))
NCURSES_UI_SO = $(OUTPUTDIR)/nvidia-installer-ncurses-ui.so
NCURSES_UI_SO_C = $(OUTPUTDIR)/g_$(notdir $(NCURSES_UI_SO:.so=.c))
+NCURSES6_UI_O = $(OUTPUTDIR)/ncurses6-ui.o
+NCURSES6_UI_SO = $(OUTPUTDIR)/nvidia-installer-ncurses6-ui.so
+NCURSES6_UI_SO_C = $(OUTPUTDIR)/g_$(notdir $(NCURSES6_UI_SO:.so=.c))
ifneq ($(NEED_TLS_TEST),)
TLS_TEST_C = $(OUTPUTDIR)/g_tls_test.c
@@ -132,7 +139,12 @@ include dist-files.mk
include $(COMMON_UTILS_DIR)/src.mk
SRC += $(addprefix $(COMMON_UTILS_DIR)/,$(COMMON_UTILS_SRC))
-INSTALLER_SRC = $(SRC) $(NCURSES_UI_SO_C) $(TLS_TEST_C) $(TLS_TEST_DSO_C) \
+NCURSES_UI_SO_SRC = $(NCURSES_UI_SO_C)
+
+NCURSES_UI_SO_SRC += $(if $(BUILD_NCURSES6),$(NCURSES6_UI_SO_C),)
+CFLAGS += $(if $(BUILD_NCURSES6),-DNV_INSTALLER_NCURSES6,)
+
+INSTALLER_SRC = $(SRC) $(NCURSES_UI_SO_SRC) $(TLS_TEST_C) $(TLS_TEST_DSO_C) \
$(RTLD_TEST_C) $(COMPAT_32_SRC) $(STAMP_C)
INSTALLER_OBJS = $(call BUILD_OBJECT_LIST,$(INSTALLER_SRC))
@@ -219,13 +231,20 @@ $(GEN_UI_ARRAY): gen-ui-array.c $(CONFIG_H)
$(call quiet_cmd,HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \
$(HOST_BIN_LDFLAGS) $< -o $@
-$(NCURSES_UI_SO): $(call BUILD_OBJECT_LIST,ncurses-ui.c)
+$(NCURSES_UI_SO): $(NCURSES_UI_O)
$(call quiet_cmd,LINK) -shared $(NCURSES_LDFLAGS) \
$(CFLAGS) $(LDFLAGS) $(BIN_LDFLAGS) $< -o $@ -lncurses $(LIBS)
+$(NCURSES6_UI_SO): $(NCURSES6_UI_O)
+ $(call quiet_cmd,LINK) -shared $(NCURSES6_LDFLAGS) \
+ $(CFLAGS) $(LDFLAGS) $(BIN_LDFLAGS) $< -o $@ -lncurses $(LIBS)
+
$(NCURSES_UI_SO_C): $(GEN_UI_ARRAY) $(NCURSES_UI_SO)
$(call quiet_cmd,GEN_UI_ARRAY) $(NCURSES_UI_SO) ncurses_ui_array > $@
+$(NCURSES6_UI_SO_C): $(GEN_UI_ARRAY) $(NCURSES6_UI_SO)
+ $(call quiet_cmd,GEN_UI_ARRAY) $(NCURSES6_UI_SO) ncurses6_ui_array > $@
+
ifneq ($(NEED_TLS_TEST),)
$(TLS_TEST_C): $(GEN_UI_ARRAY) $(TLS_TEST)
$(call quiet_cmd,GEN_UI_ARRAY) $(TLS_TEST) tls_test_array > $@
@@ -252,10 +271,15 @@ $(RTLD_TEST_32_C): $(GEN_UI_ARRAY) $(RTLD_TEST_32)
$(call BUILD_OBJECT_LIST,misc.c): CFLAGS += $(PCIACCESS_CFLAGS)
# ncurses-ui.c includes ncurses.h
-$(call BUILD_OBJECT_LIST,ncurses-ui.c): CFLAGS += $(NCURSES_CFLAGS) -fPIC
+$(NCURSES_UI_O): CFLAGS += $(NCURSES_CFLAGS)
+$(NCURSES6_UI_O): CFLAGS += $(NCURSES6_CFLAGS)
+
+# build the ncurses ui DSO as position-indpendent code
+$(NCURSES_UI_O) $(NCURSES6_UI_O): CFLAGS += -fPIC
# define the rule to build each object file
$(foreach src,$(ALL_SRC),$(eval $(call DEFINE_OBJECT_RULE,TARGET,$(src))))
+$(eval $(call DEFINE_OBJECT_RULE_WITH_OBJECT_NAME,TARGET,$(NCURSES_UI_C),$(NCURSES6_UI_O)))
# define a rule to build each makeself-help-script object file
$(foreach src,$(MAKESELF_HELP_SCRIPT_SRC),\
@@ -275,7 +299,7 @@ $(CONFIG_H): $(VERSION_MK)
@ $(ECHO) -n "#define PROGRAM_NAME " >> $@
@ $(ECHO) "\"$(NVIDIA_INSTALLER_PROGRAM_NAME)\"" >> $@
-$(call BUILD_OBJECT_LIST,$(ALL_SRC)): $(CONFIG_H)
+$(call BUILD_OBJECT_LIST,$(ALL_SRC)) $(NCURSES6_UI_O): $(CONFIG_H)
$(call BUILD_MAKESELF_OBJECT_LIST,$(MAKESELF_HELP_SCRIPT_SRC)): $(CONFIG_H)
clean clobber:
diff --git a/files.c b/files.c
index fd8b850..82e7c88 100644
--- a/files.c
+++ b/files.c
@@ -752,6 +752,13 @@ int set_destinations(Options *op, Package *p)
path = "";
break;
+ case FILE_TYPE_GRID_LIB:
+ case FILE_TYPE_GRID_LIB_SYMLINK:
+ prefix = op->opengl_prefix;
+ dir = op->opengl_libdir;
+ path = p->entries[i].path;
+ break;
+
case FILE_TYPE_OPENGL_HEADER:
prefix = op->opengl_prefix;
dir = op->opengl_incdir;
diff --git a/manifest.c b/manifest.c
index 108f3e6..617945a 100644
--- a/manifest.c
+++ b/manifest.c
@@ -114,6 +114,8 @@ static const struct {
{ ENTRY(ENCODEAPI_LIB_SYMLINK, T, F, F, F, T, F, F, F, F, F, F) },
{ ENTRY(VGX_LIB, F, F, T, F, F, T, F, F, F, F, F) },
{ ENTRY(VGX_LIB_SYMLINK, F, F, F, F, T, F, F, F, F, F, F) },
+ { ENTRY(GRID_LIB, F, F, T, T, F, T, F, F, F, F, F) },
+ { ENTRY(GRID_LIB_SYMLINK, F, F, F, T, T, F, F, F, F, F, F) },
{ ENTRY(NVIDIA_MODPROBE, F, F, T, T, F, F, F, F, F, F, F) },
{ ENTRY(NVIDIA_MODPROBE_MANPAGE,F, F, T, T, F, F, F, F, F, F, F) },
{ ENTRY(MODULE_SIGNING_KEY, F, F, T, F, F, F, F, T, F, F, F) },
diff --git a/misc.c b/misc.c
index 36c0d75..ab80f93 100644
--- a/misc.c
+++ b/misc.c
@@ -1628,6 +1628,9 @@ static int rtld_test_internal(Options *op, Package *p,
int check_runtime_configuration(Options *op, Package *p)
{
int ret = TRUE, which_tls, which_tls_compat32;
+ char *tmpdir = NULL;
+ char old_cwd[PATH_MAX];
+ int chdir_success = FALSE;
#if defined(NV_TLS_TEST)
which_tls = op->which_tls;
@@ -1639,6 +1642,17 @@ int check_runtime_configuration(Options *op, Package *p)
ui_status_begin(op, "Running runtime sanity check:", "Checking");
+ /* chdir to an empty directory to avoid picking up DSOs from the CWD */
+
+ if (getcwd(old_cwd, sizeof(old_cwd)) != NULL &&
+ (tmpdir = make_tmpdir(op)) &&
+ chdir(tmpdir) == 0) {
+ chdir_success = TRUE;
+ } else {
+ ui_warn(op, "Unable to chdir into an empty directory: this may cause "
+ "the runtime configuration test to fail on some systems.");
+ }
+
#if defined(NV_X86_64)
ret = rtld_test_internal(op, p, which_tls_compat32,
rtld_test_array_32,
@@ -1653,6 +1667,17 @@ int check_runtime_configuration(Options *op, Package *p)
FALSE);
}
+ if (chdir_success) {
+ if (chdir(old_cwd) != 0) {
+ ui_error(op, "Unable to restore cwd to '%s' (%s)!", old_cwd,
+ strerror(errno));
+ }
+ }
+
+ if (tmpdir) {
+ remove_directory(op, tmpdir);
+ }
+
ui_status_end(op, "done.");
ui_log(op, "Runtime sanity check %s.", ret ? "passed" : "failed");
diff --git a/nvidia-installer.c b/nvidia-installer.c
index e519f5e..1427c50 100644
--- a/nvidia-installer.c
+++ b/nvidia-installer.c
@@ -34,9 +34,6 @@
#include <errno.h>
-#define _GNU_SOURCE /* XXX not very portable */
-#include <getopt.h>
-
#include "nvidia-installer.h"
#include "kernel.h"
#include "user-interface.h"
diff --git a/nvidia-installer.h b/nvidia-installer.h
index 32e36c4..8409305 100644
--- a/nvidia-installer.h
+++ b/nvidia-installer.h
@@ -157,9 +157,9 @@ typedef struct __options {
int concurrency_level;
int load_error_ignored;
int glvnd_glx_client;
- int install_libglx_indirect;
- int install_libglvnd_libraries;
+ NVOptionalBool install_libglx_indirect;
+ NVOptionalBool install_libglvnd_libraries;
NVOptionalBool install_compat32_libs;
char *opengl_prefix;
@@ -273,6 +273,8 @@ typedef enum {
FILE_TYPE_ENCODEAPI_LIB_SYMLINK,
FILE_TYPE_VGX_LIB,
FILE_TYPE_VGX_LIB_SYMLINK,
+ FILE_TYPE_GRID_LIB,
+ FILE_TYPE_GRID_LIB_SYMLINK,
FILE_TYPE_APPLICATION_PROFILE,
FILE_TYPE_NVIDIA_MODPROBE,
FILE_TYPE_NVIDIA_MODPROBE_MANPAGE,
@@ -283,9 +285,9 @@ typedef enum {
FILE_TYPE_DKMS_CONF,
FILE_TYPE_GLVND_LIB,
FILE_TYPE_GLVND_SYMLINK,
+ FILE_TYPE_VULKAN_ICD_JSON,
FILE_TYPE_GLX_CLIENT_LIB,
FILE_TYPE_GLX_CLIENT_SYMLINK,
- FILE_TYPE_VULKAN_ICD_JSON,
FILE_TYPE_MAX
} PackageEntryFileType;
diff --git a/user-interface.c b/user-interface.c
index adf9ca1..f586f50 100644
--- a/user-interface.c
+++ b/user-interface.c
@@ -59,6 +59,10 @@ extern InstallerUI stream_ui_dispatch_table;
extern const char ncurses_ui_array[];
extern const int ncurses_ui_array_size;
+#if defined(NV_INSTALLER_NCURSES6)
+extern const char ncurses6_ui_array[];
+extern const int ncurses6_ui_array_size;
+#endif
/* struct describing the ui data */
@@ -98,74 +102,76 @@ int ui_init(Options *op)
int i;
user_interface_attribute_t ui_list[] = {
/* { "nvidia-installer GTK+ user interface", NULL, NULL, 0 }, */
+#if defined(NV_INSTALLER_NCURSES6)
+ { "ncurses6", "nvidia-installer ncurses v6 user interface", NULL,
+ ncurses6_ui_array, ncurses6_ui_array_size },
+#endif
{ "ncurses", "nvidia-installer ncurses user interface", NULL,
ncurses_ui_array, ncurses_ui_array_size },
{ "none", NULL, NULL, NULL, 0 }
};
-
+
/* dlopen() the appropriate ui shared lib */
-
+
__ui = NULL;
- if (op->ui_str) {
- for (i = 0; i < ARRAY_LEN(ui_list); i++) {
- if (strcmp(op->ui_str, ui_list[i].name) == 0) {
- break;
+ if (!op->silent) {
+ if (op->ui_str) {
+ for (i = 0; i < ARRAY_LEN(ui_list); i++) {
+ if (strcmp(op->ui_str, ui_list[i].name) == 0) {
+ break;
+ }
}
- }
- if (i == ARRAY_LEN(ui_list)) {
- log_printf(op, NULL, "Invalid \"ui\" option: %s", op->ui_str);
+ if (i == ARRAY_LEN(ui_list)) {
+ log_printf(op, NULL, "Invalid \"ui\" option: %s", op->ui_str);
+ i = 0;
+ }
+ } else {
i = 0;
}
- } else {
- i = 0;
- }
- if (op->silent) {
- i = 1;
- }
-
- for (; i < ARRAY_LEN(ui_list) && ui_list[i].descr && !__ui; i++) {
-
- if (!extract_user_interface(op, &ui_list[i])) continue;
-
- handle = dlopen(ui_list[i].filename, RTLD_NOW);
-
- if (handle) {
- __ui = dlsym(handle, "ui_dispatch_table");
- if (__ui && __ui->detect(op)) {
- log_printf(op, NULL, "Using: %s", ui_list[i].descr);
- __extracted_user_interface_filename = ui_list[i].filename;
- break;
+ for (; i < ARRAY_LEN(ui_list) && ui_list[i].descr && !__ui; i++) {
+
+ if (!extract_user_interface(op, &ui_list[i])) continue;
+
+ handle = dlopen(ui_list[i].filename, RTLD_NOW);
+
+ if (handle) {
+ __ui = dlsym(handle, "ui_dispatch_table");
+ if (__ui && __ui->detect(op)) {
+ log_printf(op, NULL, "Using: %s", ui_list[i].descr);
+ __extracted_user_interface_filename = ui_list[i].filename;
+ break;
+ } else {
+ log_printf(op, NULL, "Unable to initialize: %s",
+ ui_list[i].descr);
+ dlclose(handle);
+ __ui = NULL;
+ }
} else {
- log_printf(op, NULL, "Unable to initialize: %s",
- ui_list[i].descr);
- dlclose(handle);
- __ui = NULL;
+ log_printf(op, NULL, "Unable to load: %s", ui_list[i].descr);
+ log_printf(op, NULL, "");
}
- } else {
- log_printf(op, NULL, "Unable to load: %s", ui_list[i].descr);
- log_printf(op, NULL, "");
}
}
-
+
/* fall back to the always built-in stream ui */
if (!__ui) {
__ui = &stream_ui_dispatch_table;
log_printf(op, NULL, "Using built-in stream user interface");
}
-
+
/*
* init the ui
*
* XXX if init() fails, we should try to fall back to the build-in
* stream ui.
*/
-
+
if (!__ui->init(op, nv_format_text_rows)) return FALSE;
-
+
/* handle some common signals */
signal(SIGHUP, ui_signal_handler);
diff --git a/utils.mk b/utils.mk
index 958714f..31d40f9 100644
--- a/utils.mk
+++ b/utils.mk
@@ -54,9 +54,11 @@ HOST_CFLAGS += -Wno-unused-parameter -Wno-format-zero-length
ifeq ($(DEBUG),1)
STRIP_CMD ?= true
+ DO_STRIP ?=
CFLAGS += -O0 -g
else
STRIP_CMD ?= strip
+ DO_STRIP ?= 1
endif
INSTALL ?= install
@@ -154,10 +156,6 @@ OUTPUTDIR_ABSOLUTE ?= $(CURDIR)/$(OUTPUTDIR)
NV_SEPARATE_DEBUG_INFO ?=
NV_KEEP_UNSTRIPPED_BINARIES ?=
-DO_STRIP ?=
-ifneq ($(DEBUG),1)
- DO_STRIP = 1
-endif
NV_QUIET_COMMAND_REMOVED_TARGET_PREFIX ?=
diff --git a/version.mk b/version.mk
index 5c7a2e0..b04515f 100644
--- a/version.mk
+++ b/version.mk
@@ -1 +1 @@
-NVIDIA_VERSION = 364.19
+NVIDIA_VERSION = 367.18