Re: source-highlight on solaris?
Lorenzo Bettini <[email protected]> Mon, 26 Apr 2010 11:52:15 +0200
| Newsgroups | gmane.comp.gnu.source-highlight.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Stefan please try with the attached header and C++ files, these should solve the problem (FILE is defined in cstdio and I forgot to include that file; probably gcc includes it by default). Please let me know cheers Lorenzo On 04/23/2010 02:42 PM, Stefan Palm wrote: > Hi Lorenzo. > > While searching for the stl headers I realized that Sun C++ comes with two versions of the standard library: libCstd and STLport. > When switching to STLport your "setexample.cpp" works: > > adebld1z:/tmp> CC -library=stlport4 setexample.cpp -o setexample.bin > adebld1z:/tmp> ./setexample.bin > strings contains: this is a test > myset contains: a is test this > > Adding the "-library=stlport4" to CXXFLAGS when building source-highlight helped to escape the error I initially reported, but now I get another one: > > gmake[4]: Entering directory `/home/spalm0/work/source-highlight-3.1.3/lib/srchilite' > source='sourcehighlight.cpp' object='sourcehighlight.lo' libtool=yes \ > DEPDIR=.deps depmode=none /bin/bash ../../build-aux/depcomp \ > /bin/bash ../../libtool --tag=CXX --mode=compile CC -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../gl -I../../gl -library=stlport4 -I/swmtools/include -I/swmtools/include/boost -c -o sourcehighlight.lo sourcehighlight.cpp > libtool: compile: CC -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../gl -I../../gl -I/swmtools/include -library=stlport4 -I/swmtools/include -I/swmtools/include/boost -c sourcehighlight.cpp -KPIC -DPIC -o .libs/sourcehighlight.o > "fileutil.h", line 55: Error: "," expected instead of "*". > "fileutil.h", line 60: Error: Multiple declaration for FILE. > "fileutil.h", line 60: Error: "," expected instead of "*". > 3 Error(s) detected. > > > Bye, > Stefan > > > > > ----- Ursprüngliche Mail ----- > Von: "Lorenzo Bettini"<[email protected]> > An: "discussion list for source-highlight"<[email protected]> > Gesendet: Freitag, 23. April 2010 10:17:00 > Betreff: Re: [Help-source-highlight] source-highlight on solaris? > > On 04/21/2010 10:49 AM, Stefan Palm wrote: >>> Stefan >>> >>> please try with this other example which should mimic the same types of >>> the code which generates the compiler error, and let me know >> >> Hi Lorenzo, >> >> that sample won't work: >> >> adebld1z:/tmp> CC setexample.cpp -o setexample.bin >> "setexample.cpp", line 30: Error: Could not find a match for std::set<std::string>::insert(std::list<std::string>::const_iterator, std::list<std::string>::const_iterator) needed in main(). >> 1 Error(s) detected. >> >> HTH, >> Stefan > > OK > > now we found a smaller example generating the same error :) > > it looks like your compiler's stl implementation is not that standard... > > could you please send me the header file "set" which is part of your stl > header files? > > thanks > Lorenzo > -- Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino ICQ# lbetto, 16080134 (GNU/Linux User # 158233) HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com http://www.myspace.com/supertrouperabba BLOGS: http://tronprog.blogspot.com http://longlivemusic.blogspot.com http://www.gnu.org/software/src-highlite http://www.gnu.org/software/gengetopt http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net _______________________________________________ Help-source-highlight mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-source-highlight
fileutil.cc
(text/x-c++src, 8.4 KB)
/*
* Copyright (C) 2000-2008 Lorenzo Bettini <http://www.lorenzobettini.it>
*
* 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "fileutil.h"
#include "verbosity.h"
#include "ioexception.h"
#ifndef CHROOT_INPUT_DIR
#define CHROOT_INPUT_DIR ""
#endif
using namespace std;
namespace srchilite {
static bool verbose = false;
void set_file_util_verbose(bool b) {
verbose = b;
}
// global for the path to start to look for if no
// path was specified
// FIXME avoid using a global variable
std::string start_path;
string readFile(const string &fileName) throw (IOException) {
ifstream file(fileName.c_str());
if (!file.is_open()) {
throw IOException("cannot open", fileName);
}
string s, line;
while (getline(file, line)) {
s += line + "\n";
}
return s;
}
/*
char * read_file(const string &fileName) {
char *buffer = 0;
long int char_count;
// we open it as binary otherwise we may experience problems under
// Windows system: when we fread, the number of char read can be
// less then char_count, and thus we'd get an error...
ifstream file(fileName.c_str(), ios_base::binary);
if (!file.is_open() )
file_error("Error operning", fileName);
else {
// let's go to the end of the file...
file.seekg(0, ios::end);
if (!file)
file_error("Error positioning", fileName);
// ...to read the dimension
char_count = file.tellg();
if (!file)
file_error("Error reading position", fileName);
buffer = new char [char_count + 1];
if (!buffer)
internal_error("Memory allocation failed");
file.seekg(0, ios::beg);
if (!file)
file_error("Error positioning to start", fileName);
//copy file into memory
file.read(buffer, char_count);
buffer[char_count] = '\0';
file.close();
}
return buffer;
}
*/
string createOutputFileName(const string &inputFileName,
const string &outputDir, const string &ext) {
string input_file_name;
char path_separator = '/';
if (!outputDir.size())
input_file_name = inputFileName;
else {
string::size_type pos_of_sep;
pos_of_sep = inputFileName.find_last_of('/');
if (pos_of_sep == string::npos) // try with DOS separator
{
pos_of_sep = inputFileName.find_last_of('\\');
if (pos_of_sep != string::npos)
path_separator = '\\';
}
if (pos_of_sep != string::npos)
input_file_name = inputFileName.substr(pos_of_sep + 1);
else
input_file_name = inputFileName;
}
string outputFileName;
if (outputDir.size()) {
outputFileName += outputDir;
outputFileName += path_separator;
}
outputFileName += input_file_name;
outputFileName += (ext.size() ? "." + ext : "");
return outputFileName;
}
unsigned int get_line_count(istream &input) {
unsigned int count = 0;
string line;
while (true) {
getline(input, line);
if (!input.eof())
++count;
else
break;
}
return count;
}
string get_file_extension(const string &s) {
string::size_type pos_of_sep;
pos_of_sep = s.rfind(".");
if (pos_of_sep == string::npos)
return ""; // no extension
return s.substr(pos_of_sep + 1);
}
FILE *open_file_stream(const string &input_file_name) {
FILE *in = fopen(input_file_name.c_str(), "r");
return in;
}
istream *open_file_istream(const string &input_file_name) {
ifstream *in = new ifstream(input_file_name.c_str());
if (!in || !(*in)) {
if (!in)
throw IOException("no more free memory", "");
else
delete in;
return 0;
}
return in;
}
istream *open_file_istream_or_error(const string &input_file_name) {
istream *in = open_file_istream(input_file_name);
if (!in)
throw IOException("cannot open", input_file_name);
return in;
}
istream *_open_data_file_istream(const string &path,
const string &input_file_name) {
const string file = (path.size() ? path + "/" : "") + input_file_name;
VERBOSELN("opening " + file);
return open_file_istream(file);
}
istream *open_data_file_istream(const string &path,
const string &input_file_name, const string &start) {
if (!input_file_name.size())
throw IOException("empty file name", input_file_name);
istream *in = 0;
if (input_file_name.size() && contains_path(input_file_name)) {
in = _open_data_file_istream("", input_file_name);
if (!in) {
throw IOException("cannot open", input_file_name);
}
} else if (path.size() && input_file_name.size()) {
const string file = (path.size() ? path + "/" : "") + input_file_name;
in = _open_data_file_istream(path, input_file_name);
if (!in) {
throw IOException("cannot open", file);
}
} else {
string _path = path;
string _file = input_file_name;
bool has_path = contains_path(input_file_name);
if (!path.size() && !has_path)
_path = ".";
in = _open_data_file_istream(_path, _file);
if (!in && !path.size() && !has_path)
in = _open_data_file_istream(start, _file);
}
if (!in)
throw IOException("cannot find input file anywhere", input_file_name);
return in;
}
// FIXME: duplicate for istream and FILE *, make it uniform!
FILE *_open_data_file_stream(const string &path, const string &input_file_name) {
const string file = (path.size() ? path + "/" : "") + input_file_name;
VERBOSELN("opening " + file);
return open_file_stream(file);
}
FILE *open_data_file_stream(const string &path, const string &input_file_name,
const string &start) {
if (!input_file_name.size())
throw IOException("empty file name", input_file_name);
FILE *in = 0;
if (input_file_name.size() && contains_path(input_file_name)) {
in = _open_data_file_stream("", input_file_name);
if (!in) {
throw IOException("cannot open", input_file_name);
}
} else if (path.size() && input_file_name.size()) {
const string file = (path.size() ? path + "/" : "") + input_file_name;
in = _open_data_file_stream(path, input_file_name);
if (!in) {
throw IOException("cannot open", file);
}
} else {
string _path = path;
string _file = input_file_name;
bool has_path = contains_path(input_file_name);
if (!path.size() && !has_path)
_path = ".";
in = _open_data_file_stream(_path, _file);
if (!in && !path.size() && !has_path)
in = _open_data_file_stream(start, _file);
}
if (!in)
throw IOException("cannot find input file anywhere", input_file_name);
return in;
}
bool read_line(istream *in, string &line) {
if (in->eof())
return false;
getline(*in, line);
return true;
}
string get_file_path(const string &s) {
string::size_type pos_of_sep;
pos_of_sep = s.rfind("/");
if (pos_of_sep == string::npos)
pos_of_sep = s.rfind("\\"); // try also with DOS path sep
if (pos_of_sep == string::npos)
return ""; // no path
return s.substr(0, pos_of_sep + 1);
}
bool contains_path(const string &s) {
return (get_file_path(s).size() > 0);
}
string strip_file_path(const string &s) {
string::size_type pos_of_sep;
pos_of_sep = s.rfind("/");
if (pos_of_sep == string::npos)
pos_of_sep = s.rfind("\\"); // try also with DOS path sep
if (pos_of_sep == string::npos)
return s; // no path
return s.substr(pos_of_sep + 1);
}
string get_input_file_name(const string &file_name) {
if (!file_name.size())
return "";
return CHROOT_INPUT_DIR + file_name;
}
}
fileutil.h
(text/x-chdr, 1.8 KB)
//
// Author: Lorenzo Bettini <http://www.lorenzobettini.it>, (C) 2004-2008
//
// Copyright: See COPYING file that comes with this distribution
//
#ifndef _FILEUTIL_H
#define _FILEUTIL_H
#include <iostream>
#include <string>
#include <cstdio>
#include "ioexception.h"
using std::istream;
using std::string;
using std::FILE;
namespace srchilite {
extern std::string start_path;
/**
* Reads the contents of the file into a string and returns it
*
* @param fileName
* @return the contents of the file
* @throw IOException
*/
string readFile(const string &fileName) throw (IOException);
//char *read_file(const string &fileName);
/**
* Creates the output file name as outputDir + input file name + ext
*
* @param inputFileName
* @param outputDir
* @param ext
* @return the output file (including the path)
*/
string createOutputFileName(const string &inputFileName,
const string &outputDir, const string &ext);
/**
* @param input
* @return returns the number of lines of the passed input stream
*/
unsigned int get_line_count(istream &input);
/**
* @param filename
* @return returns the file extension (without the dot)
*/
string get_file_extension(const string &filename);
FILE * open_file_stream(const string &input_file_name);
istream * open_file_istream(const string &filename);
istream * open_file_istream_or_error(const string &filename);
istream * open_data_file_istream(const string &path, const string &filename,
const string &start = start_path);
FILE * open_data_file_stream(const string &path, const string &filename,
const string &start = start_path);
bool read_line(istream *in, string &line);
string get_file_path(const string &s);
bool contains_path(const string &);
string strip_file_path(const string &);
string get_input_file_name(const string &file_name);
}
#endif //_FILEUTIL_H