3434using namespace std ;
3535
3636const char *NbLauncher::NBEXEC_FILE_PATH = NBEXEC_DLL;
37+ const char *ENV_NETBEANS_USERDIR=" NETBEANS_USERDIR" ;
3738const char *NbLauncher::OPT_NB_DEFAULT_USER_DIR = " netbeans_default_userdir=" ;
3839const char *NbLauncher::OPT_NB_DEFAULT_CACHE_DIR = " netbeans_default_cachedir=" ;
3940const char *NbLauncher::OPT_NB_DEFAULT_OPTIONS = " netbeans_default_options=" ;
@@ -74,6 +75,10 @@ int NbLauncher::start(char *cmdLine) {
7475 return start (args.getCount (), args.getArgs ());
7576}
7677
78+ const char * NbLauncher::findUserDirViaEnvVar () {
79+ return getenv (ENV_NETBEANS_USERDIR);
80+ }
81+
7782int NbLauncher::start (int argc, char *argv[]) {
7883 SetErrorMode (SetErrorMode (0 ) | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
7984
@@ -82,13 +87,26 @@ int NbLauncher::start(int argc, char *argv[]) {
8287 return -1 ;
8388 }
8489
85- parseConfigFile ((baseDir + " \\ etc\\ " + getAppName () + " .conf" ).c_str ());
90+ bool skipUserDir = false ;
91+ const char *userDirViaEnv = findUserDirViaEnvVar ();
92+ if (userDirViaEnv != NULL ) {
93+ logMsg (" NbLauncher::using NETBEANS_USERDIR env variable (%s)" , userDirViaEnv);
94+ string udve = userDirViaEnv;
95+ if (udve == " IGNORE" ) {
96+ skipUserDir = true ;
97+ userDirViaEnv = NULL ;
98+ } else {
99+ userDir = userDirViaEnv;
100+ }
101+ }
102+
103+ parseConfigFile ((baseDir + " \\ etc\\ " + getAppName () + " .conf" ).c_str (), userDirViaEnv == NULL );
86104
87105 if (!parseArgs (argc, argv)) {
88106 return -1 ;
89107 }
90108 string oldUserDir = userDir;
91- parseConfigFile ((userDir + " \\ etc\\ " + getAppName () + " .conf" ).c_str ());
109+ parseConfigFile ((userDir + " \\ etc\\ " + getAppName () + " .conf" ).c_str (), userDirViaEnv == NULL );
92110 userDir = oldUserDir;
93111
94112 addExtraClusters ();
@@ -114,6 +132,18 @@ int NbLauncher::start(int argc, char *argv[]) {
114132 if (!userDir.empty ()) {
115133 newArgs.add (ARG_NAME_USER_DIR);
116134 newArgs.add (userDir.c_str ());
135+ if (!skipUserDir) {
136+ string toSet = ENV_NETBEANS_USERDIR;
137+ toSet = toSet + " =" + userDir;
138+ putenv (toSet.c_str ());
139+
140+ const char * path = getenv (" PATH" );
141+ if (path != NULL ) {
142+ string setPath = " PATH=" ;
143+ setPath = setPath + path + " ;" + baseDir + " \\ bin\\ " ;
144+ putenv (setPath.c_str ());
145+ }
146+ }
117147 }
118148 if (!defUserDirRoot.empty ()) {
119149 newArgs.add (ARG_DEFAULT_USER_DIR_ROOT);
@@ -460,7 +490,7 @@ bool NbLauncher::getOption(char *&str, const char *opt) {
460490 return false ;
461491}
462492
463- bool NbLauncher::parseConfigFile (const char * path) {
493+ bool NbLauncher::parseConfigFile (const char * path, const bool searchUserDir ) {
464494 logMsg (" parseConfigFile(%s)" , path);
465495 FILE *file = fopen (path, " r" );
466496 if (!file) {
@@ -474,7 +504,7 @@ bool NbLauncher::parseConfigFile(const char* path) {
474504 if (*str == ' #' ) {
475505 continue ;
476506 }
477- if (getOption (str, getDefUserDirOptName ())) {
507+ if (searchUserDir && getOption (str, getDefUserDirOptName ())) {
478508 findUserDir (str);
479509 logMsg (" User dir: %s" , userDir.c_str ());
480510 } else if (getOption (str, getDefCacheDirOptName ())) {
0 commit comments