diff options
author | Aaron Plattner <aplattner@nvidia.com> | 2016-05-24 12:15:03 -0700 |
---|---|---|
committer | Aaron Plattner <aplattner@nvidia.com> | 2016-05-24 12:15:03 -0700 |
commit | bbd39fb5ae11ef5ad74cd8f82df8159661dbc629 (patch) | |
tree | 69987fe551965a9470b073ca83f2aad2ced614a1 | |
parent | f2ded4a07c2deb64c5e6b9956a6cd74584aef109 (diff) |
367.18367.18
-rw-r--r-- | Makefile | 32 | ||||
-rw-r--r-- | files.c | 7 | ||||
-rw-r--r-- | manifest.c | 2 | ||||
-rw-r--r-- | misc.c | 25 | ||||
-rw-r--r-- | nvidia-installer.c | 3 | ||||
-rw-r--r-- | nvidia-installer.h | 8 | ||||
-rw-r--r-- | user-interface.c | 84 | ||||
-rw-r--r-- | utils.mk | 6 | ||||
-rw-r--r-- | version.mk | 2 |
9 files changed, 115 insertions, 54 deletions
@@ -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: @@ -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; @@ -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) }, @@ -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); @@ -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 ?= @@ -1 +1 @@ -NVIDIA_VERSION = 364.19 +NVIDIA_VERSION = 367.18 |