Commit 28e52ddb authored by Antoine Cellerier's avatar Antoine Cellerier Committed by Antoine Cellerier

Add --data-path option. Access the src share directory now works from build tree.

parent 8241e584
...@@ -133,9 +133,7 @@ int main( int i_argc, const char *ppsz_argv[] ) ...@@ -133,9 +133,7 @@ int main( int i_argc, const char *ppsz_argv[] )
argv[argc++] = FromLocale ("--plugin-path="TOP_BUILDDIR"/modules"); argv[argc++] = FromLocale ("--plugin-path="TOP_BUILDDIR"/modules");
#endif #endif
#ifdef TOP_SRCDIR #ifdef TOP_SRCDIR
# ifdef ENABLE_HTTPD argv[argc++] = FromLocale ("--data-path="TOP_SRCDIR"/share");
argv[argc++] = FromLocale ("--http-src="TOP_SRCDIR"/share/http");
# endif
#endif #endif
int i = 1; int i = 1;
......
...@@ -214,7 +214,8 @@ VLC_EXPORT( int, __config_SaveConfigFile, ( vlc_object_t *, const char * ) ); ...@@ -214,7 +214,8 @@ VLC_EXPORT( int, __config_SaveConfigFile, ( vlc_object_t *, const char * ) );
VLC_EXPORT( void, __config_ResetAll, ( vlc_object_t * ) ); VLC_EXPORT( void, __config_ResetAll, ( vlc_object_t * ) );
VLC_EXPORT( module_config_t *, config_FindConfig,( vlc_object_t *, const char * ) LIBVLC_USED ); VLC_EXPORT( module_config_t *, config_FindConfig,( vlc_object_t *, const char * ) LIBVLC_USED );
VLC_EXPORT(const char *, config_GetDataDir, ( void ) LIBVLC_USED); VLC_EXPORT(char *, __config_GetDataDir, ( vlc_object_t * ) LIBVLC_USED);
#define config_GetDataDir(a) __config_GetDataDir(VLC_OBJECT(a))
VLC_EXPORT(const char *, config_GetConfDir, ( void ) LIBVLC_USED); VLC_EXPORT(const char *, config_GetConfDir, ( void ) LIBVLC_USED);
typedef enum vlc_userdir typedef enum vlc_userdir
......
...@@ -232,9 +232,10 @@ static int Open( vlc_object_t *p_this ) ...@@ -232,9 +232,10 @@ static int Open( vlc_object_t *p_this )
psz_src = config_GetPsz( p_intf, "http-src" ); psz_src = config_GetPsz( p_intf, "http-src" );
if( ( psz_src == NULL ) || ( *psz_src == '\0' ) ) if( ( psz_src == NULL ) || ( *psz_src == '\0' ) )
{ {
const char *data_path = config_GetDataDir (); char *data_path = config_GetDataDir( p_intf );
if( asprintf( &psz_src, "%s" DIR_SEP "http", data_path ) == -1 ) if( asprintf( &psz_src, "%s" DIR_SEP "http", data_path ) == -1 )
psz_src = NULL; psz_src = NULL;
free( data_path );
} }
if( !psz_src || *psz_src == '\0' ) if( !psz_src || *psz_src == '\0' )
......
...@@ -158,12 +158,13 @@ static void Run( intf_thread_t *p_intf ) ...@@ -158,12 +158,13 @@ static void Run( intf_thread_t *p_intf )
// A little theming // A little theming
char *psz_rc_file = NULL; char *psz_rc_file = NULL;
if( asprintf( &psz_rc_file, "%s/maemo/vlc_intf.rc", char *psz_data = config_GetDataDir( p_intf );
config_GetDataDir() ) != -1 ) if( asprintf( &psz_rc_file, "%s/maemo/vlc_intf.rc", psz_data ) != -1 )
{ {
gtk_rc_parse( psz_rc_file ); gtk_rc_parse( psz_rc_file );
free( psz_rc_file ); free( psz_rc_file );
} }
free( psz_data );
// We create the main vertical box // We create the main vertical box
main_vbox = gtk_vbox_new( FALSE, 0 ); main_vbox = gtk_vbox_new( FALSE, 0 );
......
...@@ -229,14 +229,12 @@ bool Win32Factory::init() ...@@ -229,14 +229,12 @@ bool Win32Factory::init()
char *datadir = config_GetUserDir( VLC_DATA_DIR ); char *datadir = config_GetUserDir( VLC_DATA_DIR );
m_resourcePath.push_back( (string)datadir + "\\skins" ); m_resourcePath.push_back( (string)datadir + "\\skins" );
free( datadir ); free( datadir );
m_resourcePath.push_back( (string)config_GetDataDir() + datadir = config_GetDataDir( getIntf() );
"\\skins" ); m_resourcePath.push_back( (string)datadir + "\\skins" );
m_resourcePath.push_back( (string)config_GetDataDir() + m_resourcePath.push_back( (string)datadir + "\\skins2" );
"\\skins2" ); m_resourcePath.push_back( (string)datadir + "\\share\\skins" );
m_resourcePath.push_back( (string)config_GetDataDir() + m_resourcePath.push_back( (string)datadir + "\\share\\skins2" );
"\\share\\skins" ); free( datadir );
m_resourcePath.push_back( (string)config_GetDataDir() +
"\\share\\skins2" );
// All went well // All went well
return true; return true;
......
...@@ -80,7 +80,9 @@ bool X11Factory::init() ...@@ -80,7 +80,9 @@ bool X11Factory::init()
m_resourcePath.push_back( (string)datadir + "/skins2" ); m_resourcePath.push_back( (string)datadir + "/skins2" );
free( datadir ); free( datadir );
m_resourcePath.push_back( (string)"share/skins2" ); m_resourcePath.push_back( (string)"share/skins2" );
m_resourcePath.push_back( (string)config_GetDataDir () + "/skins2" ); datadir = config_GetDataDir( getIntf() );
m_resourcePath.push_back( (string)datadir + "/skins2" );
free( datadir );
return true; return true;
} }
......
...@@ -57,11 +57,11 @@ static const char * const ppsz_intf_options[] = { "intf", "config", NULL }; ...@@ -57,11 +57,11 @@ static const char * const ppsz_intf_options[] = { "intf", "config", NULL };
/***************************************************************************** /*****************************************************************************
* *
*****************************************************************************/ *****************************************************************************/
static char *FindFile( const char *psz_name ) static char *FindFile( vlc_object_t *p_this, const char *psz_name )
{ {
char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL }; char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL };
char **ppsz_dir; char **ppsz_dir;
vlclua_dir_list( "intf", ppsz_dir_list ); vlclua_dir_list( p_this, "intf", ppsz_dir_list );
for( ppsz_dir = ppsz_dir_list; *ppsz_dir; ppsz_dir++ ) for( ppsz_dir = ppsz_dir_list; *ppsz_dir; ppsz_dir++ )
{ {
char *psz_filename; char *psz_filename;
...@@ -162,7 +162,7 @@ int Open_LuaIntf( vlc_object_t *p_this ) ...@@ -162,7 +162,7 @@ int Open_LuaIntf( vlc_object_t *p_this )
return VLC_ENOMEM; return VLC_ENOMEM;
} }
p_sys = p_intf->p_sys; p_sys = p_intf->p_sys;
p_sys->psz_filename = FindFile( psz_name ); p_sys->psz_filename = FindFile( p_this, psz_name );
if( !p_sys->psz_filename ) if( !p_sys->psz_filename )
{ {
msg_Err( p_intf, "Couldn't find lua interface script \"%s\".", msg_Err( p_intf, "Couldn't find lua interface script \"%s\".",
......
...@@ -114,7 +114,9 @@ static int vlclua_quit( lua_State *L ) ...@@ -114,7 +114,9 @@ static int vlclua_quit( lua_State *L )
*****************************************************************************/ *****************************************************************************/
static int vlclua_datadir( lua_State *L ) static int vlclua_datadir( lua_State *L )
{ {
lua_pushstring( L, config_GetDataDir() ); char *psz_data = config_GetDataDir( vlclua_get_this( L ) );
lua_pushstring( L, psz_data );
free( psz_data );
return 1; return 1;
} }
...@@ -157,7 +159,8 @@ static int vlclua_datadir_list( lua_State *L ) ...@@ -157,7 +159,8 @@ static int vlclua_datadir_list( lua_State *L )
char **ppsz_dir = ppsz_dir_list; char **ppsz_dir = ppsz_dir_list;
int i = 1; int i = 1;
if( vlclua_dir_list( psz_dirname, ppsz_dir_list ) != VLC_SUCCESS ) if( vlclua_dir_list( vlclua_get_this( L ), psz_dirname, ppsz_dir_list )
!= VLC_SUCCESS )
return 0; return 0;
lua_newtable( L ); lua_newtable( L );
for( ; *ppsz_dir; ppsz_dir++ ) for( ; *ppsz_dir; ppsz_dir++ )
......
...@@ -132,7 +132,7 @@ static int vlclua_net_accept( lua_State *L ) ...@@ -132,7 +132,7 @@ static int vlclua_net_accept( lua_State *L )
int i_fd = -1; int i_fd = -1;
unsigned int i_count = 1; unsigned int i_count = 1;
while( pi_fd[0][i_count] != -1 ) while( pi_fd[i_count] != -1 )
i_count++; i_count++;
struct pollfd ufd[i_count+1]; struct pollfd ufd[i_count+1];
......
...@@ -105,7 +105,7 @@ static int file_compare( const char **a, const char **b ) ...@@ -105,7 +105,7 @@ static int file_compare( const char **a, const char **b )
return strcmp( *a, *b ); return strcmp( *a, *b );
} }
int vlclua_dir_list( const char *luadirname, char **ppsz_dir_list ) int vlclua_dir_list( vlc_object_t *p_this, const char *luadirname, char **ppsz_dir_list )
{ {
int i = 0; int i = 0;
char *datadir = config_GetUserDir( VLC_DATA_DIR ); char *datadir = config_GetUserDir( VLC_DATA_DIR );
...@@ -121,25 +121,26 @@ int vlclua_dir_list( const char *luadirname, char **ppsz_dir_list ) ...@@ -121,25 +121,26 @@ int vlclua_dir_list( const char *luadirname, char **ppsz_dir_list )
free( datadir ); free( datadir );
i++; i++;
char *psz_datapath = config_GetDataDir( p_this );
# if defined(__APPLE__) || defined(SYS_BEOS) || defined(WIN32) # if defined(__APPLE__) || defined(SYS_BEOS) || defined(WIN32)
{ {
const char *psz_vlcpath = config_GetDataDir();
if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "lua" DIR_SEP "%s", if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "lua" DIR_SEP "%s",
psz_vlcpath, luadirname ) < 0 ) psz_datapath, luadirname ) < 0 )
return VLC_ENOMEM; return VLC_ENOMEM;
i++; i++;
if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "share" DIR_SEP "lua" DIR_SEP "%s", if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "share" DIR_SEP "lua" DIR_SEP "%s",
psz_vlcpath, luadirname ) < 0 ) psz_datapath, luadirname ) < 0 )
return VLC_ENOMEM; return VLC_ENOMEM;
i++; i++;
} }
# else # else
if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "lua" DIR_SEP "%s", if( asprintf( &ppsz_dir_list[i], "%s" DIR_SEP "lua" DIR_SEP "%s",
config_GetDataDir (), luadirname ) < 0 ) psz_datapath, luadirname ) < 0 )
return VLC_ENOMEM; return VLC_ENOMEM;
i++; i++;
# endif # endif
free( psz_datapath );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -169,7 +170,7 @@ int vlclua_scripts_batch_execute( vlc_object_t *p_this, ...@@ -169,7 +170,7 @@ int vlclua_scripts_batch_execute( vlc_object_t *p_this,
char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL }; char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL };
char **ppsz_dir; char **ppsz_dir;
i_ret = vlclua_dir_list( luadirname, ppsz_dir_list ); i_ret = vlclua_dir_list( p_this, luadirname, ppsz_dir_list );
if( i_ret != VLC_SUCCESS ) if( i_ret != VLC_SUCCESS )
return i_ret; return i_ret;
i_ret = VLC_EGENERIC; i_ret = VLC_EGENERIC;
......
...@@ -105,7 +105,7 @@ int vlclua_push_ret( lua_State *, int i_error ); ...@@ -105,7 +105,7 @@ int vlclua_push_ret( lua_State *, int i_error );
int vlclua_scripts_batch_execute( vlc_object_t *p_this, const char * luadirname, int vlclua_scripts_batch_execute( vlc_object_t *p_this, const char * luadirname,
int (*func)(vlc_object_t *, const char *, lua_State *, void *), int (*func)(vlc_object_t *, const char *, lua_State *, void *),
lua_State * L, void * user_data ); lua_State * L, void * user_data );
int vlclua_dir_list( const char *luadirname, char **ppsz_dir_list ); int vlclua_dir_list( vlc_object_t *p_this, const char *luadirname, char **ppsz_dir_list );
void vlclua_dir_list_free( char **ppsz_dir_list ); void vlclua_dir_list_free( char **ppsz_dir_list );
/***************************************************************************** /*****************************************************************************
......
...@@ -115,9 +115,10 @@ static int Open( vlc_object_t *p_this ) ...@@ -115,9 +115,10 @@ static int Open( vlc_object_t *p_this )
p_sys->app_name = CFSTR( "VLC media player" ); p_sys->app_name = CFSTR( "VLC media player" );
p_sys->notification_type = CFSTR( "New input playing" ); p_sys->notification_type = CFSTR( "New input playing" );
const char *data_path = config_GetDataDir (); char *data_path = config_GetDataDir ( p_this );
char buf[strlen (data_path) + sizeof ("/vlc48x48.png")]; char buf[strlen (data_path) + sizeof ("/vlc48x48.png")];
snprintf (buf, sizeof (buf), "%s/vlc48x48.png", data_path); snprintf (buf, sizeof (buf), "%s/vlc48x48.png", data_path);
free( data_path );
p_sys->default_icon = (CFDataRef) readFile( buf ); p_sys->default_icon = (CFDataRef) readFile( buf );
playlist_t *p_playlist = pl_Hold( p_intf ); playlist_t *p_playlist = pl_Hold( p_intf );
......
...@@ -224,11 +224,13 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var, ...@@ -224,11 +224,13 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
{ {
GError *p_error = NULL; GError *p_error = NULL;
char *psz_pixbuf; char *psz_pixbuf;
if( asprintf( &psz_pixbuf, "%s/vlc48x48.png", config_GetDataDir() ) >= 0 ) char *psz_data = config_GetDataDir( p_this );
if( asprintf( &psz_pixbuf, "%s/vlc48x48.png", psz_data ) >= 0 )
{ {
pix = gdk_pixbuf_new_from_file( psz_pixbuf, &p_error ); pix = gdk_pixbuf_new_from_file( psz_pixbuf, &p_error );
free( psz_pixbuf ); free( psz_pixbuf );
} }
free( psz_data );
} }
free( psz_arturl ); free( psz_arturl );
......
...@@ -428,6 +428,7 @@ SOURCES_libvlc_common = \ ...@@ -428,6 +428,7 @@ SOURCES_libvlc_common = \
config/intf.c \ config/intf.c \
config/keys.c \ config/keys.c \
config/cmdline.c \ config/cmdline.c \
config/dirs.c \
misc/events.c \ misc/events.c \
misc/image.c \ misc/image.c \
misc/messages.c \ misc/messages.c \
......
...@@ -45,6 +45,8 @@ void config_UnsetCallbacks( module_config_t *, size_t ); ...@@ -45,6 +45,8 @@ void config_UnsetCallbacks( module_config_t *, size_t );
int __config_LoadCmdLine ( vlc_object_t *, int *, const char *[], bool ); int __config_LoadCmdLine ( vlc_object_t *, int *, const char *[], bool );
int __config_LoadConfigFile( vlc_object_t *, const char * ); int __config_LoadConfigFile( vlc_object_t *, const char * );
const char *config_GetDataDirDefault( void );
int IsConfigStringType( int type ); int IsConfigStringType( int type );
int IsConfigIntegerType (int type); int IsConfigIntegerType (int type);
static inline int IsConfigFloatType (int type) static inline int IsConfigFloatType (int type)
......
/*****************************************************************************
* dirs.c: crossplatform directories configuration
*****************************************************************************
* Copyright (C) 2009 the VideoLAN team
*
* Authors: Antoine Cellerier <dionoea at videolan dot org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc_common.h>
#include "../libvlc.h"
#include "configuration.h"
/**
* Determines the shared data directory
*
* @return a string (always succeeds). Needs to be freed.
*/
char *__config_GetDataDir( vlc_object_t *p_obj )
{
char *psz_path = config_GetPsz( p_obj, "data-path" );
if( psz_path && *psz_path )
return psz_path;
free( psz_path );
return strdup( config_GetDataDirDefault() );
}
...@@ -49,7 +49,7 @@ const char *config_GetConfDir( void ) ...@@ -49,7 +49,7 @@ const char *config_GetConfDir( void )
return configdir; return configdir;
} }
const char *config_GetDataDir (void) const char *config_GetDataDirDefault (void)
{ {
pthread_once(&once, init_dirs); pthread_once(&once, init_dirs);
return datadir; return datadir;
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include <assert.h> #include <assert.h>
#include <limits.h> #include <limits.h>
const char *config_GetDataDir( void ) const char *config_GetDataDirDefault( void )
{ {
static char path[PATH_MAX] = ""; static char path[PATH_MAX] = "";
#warning FIXME: thread-safety! #warning FIXME: thread-safety!
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
* *
* @return a string (always succeeds). * @return a string (always succeeds).
*/ */
const char *config_GetDataDir( void ) const char *config_GetDataDirDefault( void )
{ {
return DATA_PATH; return DATA_PATH;
} }
......
...@@ -1120,6 +1120,10 @@ static const char *const ppsz_clock_descriptions[] = ...@@ -1120,6 +1120,10 @@ static const char *const ppsz_clock_descriptions[] =
"Additional path for VLC to look for its modules. You can add " \ "Additional path for VLC to look for its modules. You can add " \
"several paths by concatenating them using \" PATH_SEP \" as separator") "several paths by concatenating them using \" PATH_SEP \" as separator")
#define DATA_PATH_TEXT N_("Data search path")
#define DATA_PATH_LONGTEXT N_( \
"Override the default data/share search path.")
#define VLM_CONF_TEXT N_("VLM configuration file") #define VLM_CONF_TEXT N_("VLM configuration file")
#define VLM_CONF_LONGTEXT N_( \ #define VLM_CONF_LONGTEXT N_( \
"Read a VLM configuration file as soon as VLM is started." ) "Read a VLM configuration file as soon as VLM is started." )
...@@ -2033,6 +2037,9 @@ vlc_module_begin () ...@@ -2033,6 +2037,9 @@ vlc_module_begin ()
add_directory( "plugin-path", NULL, NULL, PLUGIN_PATH_TEXT, add_directory( "plugin-path", NULL, NULL, PLUGIN_PATH_TEXT,
PLUGIN_PATH_LONGTEXT, true ) PLUGIN_PATH_LONGTEXT, true )
change_need_restart () change_need_restart ()
add_directory( "data-path", NULL, NULL, DATA_PATH_TEXT,
DATA_PATH_LONGTEXT, true )
change_need_restart ()
set_section( N_("Performance options"), NULL ) set_section( N_("Performance options"), NULL )
add_obsolete_bool( "minimize-threads" ) add_obsolete_bool( "minimize-threads" )
......
...@@ -52,7 +52,7 @@ __config_ChainParse ...@@ -52,7 +52,7 @@ __config_ChainParse
__config_ExistIntf __config_ExistIntf
config_FindConfig config_FindConfig
config_GetConfDir config_GetConfDir
config_GetDataDir __config_GetDataDir
__config_GetFloat __config_GetFloat
config_GetUserDir config_GetUserDir
__config_GetInt __config_GetInt
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment