static void __attribute__ ((constructor)) _init(void) { get_rchan_offsets(); register_extension(command_table); return; }
void bin_install( char *package, char *gisbase, char *bins, char *pkg_short_name, int pkg_major, int pkg_minor, int pkg_revision, char *grass_version ) { char tmp[2048]; char dir[2048]; char install_cmd[2048]; char post_cmd[2048]; int error = stat( gisbase, &buf.st_dev ); struct stat buf; FILE *f; char *verstr; char *grass_major; char *grass_minor; char *grass_revision; int major, minor, revision; if ( error < 0 ) { print_error( -5, "installation directory invalid: %s\n", strerror( *(int*)(__errno_location( )) ) ); } sprintf( GINSTALL_DST, "GINSTALL_DST=%s", gisbase ); putenv( GINSTALL_DST ); sprintf( tmp, "%s/include", gisbase ); sprintf( GINSTALL_INC, "GINSTALL_INC=%s", tmp ); putenv( GINSTALL_INC ); sprintf( tmp, "%s/lib", gisbase ); sprintf( GINSTALL_LIB, "GINSTALL_LIB=%s", tmp ); putenv( GINSTALL_LIB ); sprintf( GEM_GRASS_DIR, "GEM_GRASS_DIR=%s", gisbase ); putenv( GEM_GRASS_DIR ); verstr = strdup( grass_version ); grass_major = strtok( verstr, "." ); grass_minor = strtok( 0, "." ); grass_revision = strtok( 0, "." ); major = strtol( grass_major, 0, 10 ); minor = strtol( grass_minor, 0, 10 ); revision = strtol( grass_revision, 0, 10 ); free( verstr ); atexit( &exit_tmp ); sprintf( dir, "%s/%s", basename( package ), bins ); error = chdir( dir ); if ( error < 0 ) { print_error( -2, "extension file binaries in '%s' not accessible: %s\n", package, strerror( *(int*)(__errno_location( )) ) ); } sprintf( GEM_EXT_NAME, "GEM_EXT_NAME=%s", pkg_short_name ); putenv( GEM_EXT_NAME ); sprintf( tmp, "%i.%i.%i", pkg_major, pkg_minor, pkg_revision ); sprintf( GEM_EXT_VERSION, "GEM_EXT_VERSION=%s", tmp ); putenv( GEM_EXT_VERSION ); dump_html( "../description", TMP_DESCR ); dump_html( "../info", TMP_INFO ); dump_html( "../depends", TMP_DEPS ); dump_html( "../bugs", TMP_BUGS ); dump_html( "../authors", TMP_AUTHORS ); sprintf( GEM_EXT_DESCR, "GEM_EXT_DESCR=%s", TMP_DESCR ); putenv( GEM_EXT_DESCR ); sprintf( GEM_EXT_INFO, "GEM_EXT_INFO=%s", TMP_INFO ); putenv( GEM_EXT_INFO ); sprintf( GEM_EXT_DEPS, "GEM_EXT_DEPS=%s", TMP_DEPS ); putenv( GEM_EXT_DEPS ); sprintf( GEM_EXT_BUGS, "GEM_EXT_BUGS=%s", TMP_BUGS ); putenv( GEM_EXT_BUGS ); sprintf( GEM_EXT_AUTHORS, "GEM_EXT_AUTHORS=%s", TMP_AUTHORS ); putenv( GEM_EXT_AUTHORS ); atexit( &exit_tmp ); check_dependencies( package, gisbase, grass_version ); fwrite( "Installing...", 1, 13, stdout ); f = (FILE*)fopen( "../uninstall", "r" ); if ( f == 0 ) { print_warning( "error checking for uninstall script: %s\n \t\t\t\tUninstalling this extension may leave orphaned files on your system", strerror( *(int*)(__errno_location( )) ) ); } else { if ( VERBOSE ) { sprintf( tmp, "cp -vf ../uninstall %s/etc/uninstall.%s ;", gisbase, pkg_short_name ); strcpy( UNINSTALL_CMD, tmp ); } else { sprintf( tmp, "cp -f ../uninstall %s/etc/uninstall.%s &> %s ;", gisbase, pkg_short_name, TMP_NULL ); strcpy( UNINSTALL_CMD, tmp ); } fclose( f ); } register_extension( gisbase, bins, pkg_short_name, pkg_major, pkg_minor, pkg_revision ); check_dependencies( package, gisbase, grass_version ); if ( major == 6 && minor <= 0 ) register_entries_gisman( pkg_short_name, gisbase ); register_entries_gisman2( pkg_short_name, gisbase ); register_html( pkg_short_name, gisbase, pkg_major, pkg_minor, pkg_revision ); if ( VERBOSE ) { fprintf( stdout, "Running '%s install':\n", MAKE_CMD ); sprintf( install_cmd, "bin/%s -f Makefile install ; \t\t\t\t\tcp -vf %s %s/etc/extensions.db ; chmod -v a+r %s/etc/extensions.db ;", MAKE_CMD, TMPDB, gisbase, gisbase ); } else sprintf( install_cmd, "bin/%s -f Makefile -s install &> %s ; \t\t\t\t\tcp -f %s %s/etc/extensions.db &> %s ; chmod a+r %s/etc/extensions.db &> %s ;", MAKE_CMD, TMP_NULL, TMPDB, gisbase, TMP_NULL, gisbase, TMP_NULL ); if ( VERBOSE ) memcpy( post_cmd, "sh ../post", 11 ); else sprintf( post_cmd, "sh ../post &> %s", TMP_NULL ); sprintf( tmp, "%s %s %s %s %s %s", install_cmd, UNINSTALL_CMD, GISMAN_CMD, GISMAN2_CMD, HTML_CMD, post_cmd ); su( gisbase, tmp ); print_done( ); return; }
void test_install( char *package, char *gisbase, char *pkg_short_name, int pkg_major, int pkg_minor, int pkg_revision, char *grass_version ) { char tmp[2048]; char dir[2048]; char sysstr[2048]; int error = stat( gisbase, &buf.st_dev ); struct stat buf; FILE *f; char *verstr; char *grass_major; char *grass_minor; char *grass_revision; int major, minor, revision; if ( error < 0 ) { print_error( -5, "installation directory invalid: %s\n", strerror( *(int*)(__errno_location( )) ) ); } sprintf( GINSTALL_DST, "GINSTALL_DST=%s", gisbase ); putenv( GINSTALL_DST ); sprintf( tmp, "%s/include", gisbase ); sprintf( GINSTALL_INC, "GINSTALL_INC=%s", tmp ); putenv( GINSTALL_INC ); sprintf( tmp, "%s/lib", gisbase ); sprintf( GINSTALL_LIB, "GINSTALL_LIB=%s", tmp ); putenv( GINSTALL_LIB ); sprintf( GEM_GRASS_DIR, "GEM_GRASS_DIR=%s", gisbase ); putenv( GEM_GRASS_DIR ); verstr = strdup( grass_version ); grass_major = strtok( verstr, "." ); grass_minor = strtok( 0, "." ); grass_revision = strtok( 0, "." ); major = strtol( grass_major, 0, 10 ); minor = strtol( grass_minor, 0, 10 ); revision = strtol( grass_revision, 0, 10 ); free( verstr ); atexit( &exit_tmp ); sprintf( dir, "%s/src", basename( package ) ); error = chdir( dir ); if ( error < 0 ) { print_error( -2, "extension files in '%s' not accessible: %s\n", package, strerror( *(int*)(__errno_location( )) ) ); } if ( SKIP_CFG == 0 ) { if ( VERBOSE ) { fwrite( "Running configure script:\n", 1, 26, stdout ); sprintf( sysstr, "sh %s %s", CONFIG_CMD, CONFIG_OPTS ); error = system( sysstr ); } else { fwrite( "Configuring...", 1, 14, stdout ); sprintf( sysstr, "sh %s %s --quiet &> %s", CONFIG_CMD, CONFIG_OPTS, TMP_NULL ); error = system( sysstr ); } if ( error == -1 ) print_error( -27, "could not run configure script.\n" ); if ( error > 0 ) print_error( -3, "system configuration failed.\n" ); print_done( ); print_cfg( ); } sprintf( GEM_EXT_NAME, "GEM_EXT_NAME=%s", pkg_short_name ); putenv( GEM_EXT_NAME ); sprintf( tmp, "%i.%i.%i", pkg_major, pkg_minor, pkg_revision ); sprintf( GEM_EXT_VERSION, "GEM_EXT_VERSION=%s", tmp ); putenv( GEM_EXT_VERSION ); dump_plain( "../description", TMP_DESCR ); dump_plain( "../info", TMP_INFO ); dump_plain( "../depends", TMP_DEPS ); dump_plain( "../bugs", TMP_BUGS ); dump_plain( "../authors", TMP_AUTHORS ); sprintf( GEM_EXT_DESCR, "GEM_EXT_DESCR=%s", TMP_DESCR ); putenv( GEM_EXT_DESCR ); sprintf( GEM_EXT_INFO, "GEM_EXT_INFO=%s", TMP_INFO ); putenv( GEM_EXT_INFO ); sprintf( GEM_EXT_DEPS, "GEM_EXT_DEPS=%s", TMP_DEPS ); putenv( GEM_EXT_DEPS ); sprintf( GEM_EXT_BUGS, "GEM_EXT_BUGS=%s", TMP_BUGS ); putenv( GEM_EXT_BUGS ); sprintf( GEM_EXT_AUTHORS, "GEM_EXT_AUTHORS=%s", TMP_AUTHORS ); putenv( GEM_EXT_AUTHORS ); atexit( &exit_tmp ); check_dependencies( package, gisbase, grass_version ); if ( VERBOSE ) { fprintf( stdout, "Running '%s':\n", MAKE_CMD ); sprintf( sysstr, "%s -f Makefile", MAKE_CMD ); error = system( sysstr ); } else { fwrite( "Compiling...", 1, 12, stdout ); sprintf( sysstr, "%s -f Makefile &> %s", MAKE_CMD, TMP_NULL ); error = system( sysstr ); } if ( error == -1 && VERBOSE == 0 ) print_error( -9, "could not run '%s' do you have make tools installed?\n", MAKE_CMD[0] ); if ( error > 0 ) print_error( -4, "source code could not be compiled.\n \t\t\tRun again with option -v to see what is causing trouble.\n" ); print_done( ); fwrite( "Installing...", 1, 13, stdout ); f = (FILE*)fopen( "../uninstall", "r" ); if ( f == 0 ) { print_warning( "error checking for uninstall script: %s\n \t\t\t\tUninstalling this extension may leave orphaned files on your system", strerror( *(int*)(__errno_location( )) ) ); } else fclose( f ); register_extension( gisbase, "src", pkg_short_name, pkg_major, pkg_minor, pkg_revision ); check_dependencies( package, gisbase, grass_version ); if ( major == 6 && minor <= 0 ) register_entries_gisman( pkg_short_name, gisbase ); register_entries_gisman2( pkg_short_name, gisbase ); register_html( pkg_short_name, gisbase, pkg_major, pkg_minor, pkg_revision ); fprintf( stdout, "(skipping '%s install')...", MAKE_CMD ); print_done( ); return; }
snap_init(void) /* Register the command set. */ { register_extension(command_table); }