diff --git a/MANIFEST.in b/MANIFEST.in index fc060a5e..082c0c34 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,10 +1,7 @@ -include libsass/*.h -include libsass/*.hpp -include libsass/*.cpp +recursive-include libsas *.c +recursive-include libsas *.cpp +recursive-include libsas *.h +recursive-include libsas *.hpp include libsass/Makefile -include libsass/Makefile.am -include libsass/b64/*.h -include libsass/utf8/*.h -include win32/*.h include test/*.scss include README.rst diff --git a/Makefile b/Makefile index daaa3c93..d203291a 100644 --- a/Makefile +++ b/Makefile @@ -9,24 +9,24 @@ # $ make -j 4 && python -m unittest sasstests PY_HEADERS := -I/usr/include/python2.7 -C_SOURCES := $(wildcard libsass/*.c) -C_OBJECTS = $(patsubst libsass/%.c,build2/libsass/c/%.o,$(C_SOURCES)) -CPP_SOURCES := $(wildcard libsass/*.cpp) -CPP_OBJECTS = $(patsubst libsass/%.cpp,build2/libsass/cpp/%.o,$(CPP_SOURCES)) +C_SOURCES := $(wildcard libsass/src/*.c) +C_OBJECTS = $(patsubst libsass/src/%.c,build2/libsass/c/%.o,$(C_SOURCES)) +CPP_SOURCES := $(wildcard libsass/src/*.cpp) +CPP_OBJECTS = $(patsubst libsass/src/%.cpp,build2/libsass/cpp/%.o,$(CPP_SOURCES)) all: _sass.so -build2/libsass/c/%.o: libsass/%.c +build2/libsass/c/%.o: libsass/src/%.c @mkdir -p build2/libsass/c/ - gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses + gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass/include $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses -build2/libsass/cpp/%.o: libsass/%.cpp +build2/libsass/cpp/%.o: libsass/src/%.cpp @mkdir -p build2/libsass/cpp/ - gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses + gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass/include $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses build2/pysass.o: pysass.cpp @mkdir -p build2 - gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses + gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I./libsass/include $(PY_HEADERS) -c $^ -o $@ -c -O2 -fPIC -std=c++0x -Wall -Wno-parentheses _sass.so: $(C_OBJECTS) $(CPP_OBJECTS) build2/pysass.o g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro $^ -L./libsass -o $@ -fPIC -lstdc++ diff --git a/libsass b/libsass index 0e6b4a28..61ac61a2 160000 --- a/libsass +++ b/libsass @@ -1 +1 @@ -Subproject commit 0e6b4a2850092356aa3ece07c6b249f0221caced +Subproject commit 61ac61a2b2ffef30233c9eab93633cc2622a562f diff --git a/pysass.cpp b/pysass.cpp index dee6c1cd..bba86d88 100644 --- a/pysass.cpp +++ b/pysass.cpp @@ -1,6 +1,6 @@ #include #include -#include "sass_context.h" +#include #if PY_MAJOR_VERSION >= 3 #define PySass_IF_PY3(three, two) (three) diff --git a/sasstests.py b/sasstests.py index 770e28b5..97efda65 100644 --- a/sasstests.py +++ b/sasstests.py @@ -56,10 +56,11 @@ def normalize_path(path): 'version': 3, 'file': 'test/a.css', 'sources': ['test/a.scss'], - 'sourcesContent': [], 'names': [], - 'mappings': ';AAKA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAM,GAGpB;;' - 'EAEJ,IAAI,CAAC,CAAC,CAAJ;IACA,KAAK,EAAE,IAAK,GADX', + 'mappings': ( + ';AAKA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAM,GAQzB;;EALD,IAAI,CAEF,CAAC,' + 'CAAC;IACA,KAAK,EAAE,IAAK,GACb' + ), } B_EXPECTED_CSS = '''\ @@ -457,10 +458,10 @@ def test_build_one(self): 'version': 3, 'file': '../test/b.css', 'sources': ['../test/b.scss'], - 'sourcesContent': [], 'names': [], - 'mappings': ';AACE,CAAC,CAAC,CAAC,CAAD;' - 'EACA,SAAS,EAAE,IAAK,GADf', + 'mappings': ( + ';AAAA,CAAC,CACC,CAAC,CAAC;EACA,SAAS,EAAE,IAAK,GACjB' + ), }, os.path.join(d, 'css', 'b.scss.css.map') ) @@ -476,11 +477,11 @@ def test_build_one(self): 'version': 3, 'file': '../test/d.css', 'sources': ['../test/d.scss'], - 'sourcesContent': [], 'names': [], - 'mappings': ';;AAKA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAM,GAGpB;' - ';EAEJ,IAAI,CAAC,CAAC,CAAJ' - ';IACA,IAAI,EAAE,0BAA2B,GADhC', + 'mappings': ( + ';;AAKA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAM,GAQzB;;EALD,' + 'IAAI,CAEF,CAAC,CAAC;IACA,IAAI,EAAE,0BAA2B,GAClC' + ), }, os.path.join(d, 'css', 'd.scss.css.map') ) @@ -757,7 +758,7 @@ def test_error(self): except sass.CompileError as e: msg, = e.args assert msg.decode('UTF-8').startswith( - 'Error: invalid property name' + 'Error: Invalid CSS after ' ), msg return except Exception as e: diff --git a/setup.py b/setup.py index 388e3549..f1224e68 100644 --- a/setup.py +++ b/setup.py @@ -20,10 +20,9 @@ use_setuptools() from setuptools import Extension, setup -LIBSASS_DIR = 'libsass' +LIBSASS_SOURCE_DIR = os.path.join('libsass', 'src') - -if not os.path.isfile(os.path.join(LIBSASS_DIR, 'Makefile')) and \ +if not os.path.isfile(os.path.join('libsass', 'Makefile')) and \ os.path.isdir('.git'): print(file=sys.stderr) print('You seem to miss initializing submodules; ' @@ -31,12 +30,19 @@ print(' git submodule update --init', file=sys.stderr) print(file=sys.stderr) -libsass_files = os.listdir(LIBSASS_DIR) -libsass_sources = [f for f in libsass_files if f.endswith(('.c', '.cpp'))] -libsass_headers = [f for f in libsass_files if f.endswith(('.h', '.hpp'))] -headers = [os.path.join(LIBSASS_DIR, f) for f in libsass_headers] -sources = [os.path.join(LIBSASS_DIR, f) for f in libsass_sources] -sources.append('pysass.cpp') +sources = ['pysass.cpp'] +headers = [] +for directory in ( + os.path.join('libsass', 'src'), + os.path.join('libsass', 'include') +): + for pth, _, filenames in os.walk(directory): + for filename in filenames: + filename = os.path.join(pth, filename) + if filename.endswith(('.c', '.cpp')): + sources.append(filename) + elif filename.endswith('.h'): + headers.append(filename) if sys.platform == 'win32': from distutils.msvc9compiler import get_build_version @@ -98,7 +104,7 @@ def customize_compiler(compiler): # Dirty workaround to avoid link error... # Python distutils doesn't provide any way to configure different # flags for each cc and c++. - cencode_path = os.path.join(LIBSASS_DIR, 'cencode.c') + cencode_path = os.path.join(LIBSASS_SOURCE_DIR, 'cencode.c') cencode_body = '' with open(cencode_path) as f: cencode_body = f.read() @@ -131,9 +137,9 @@ def restore_cencode(): sass_extension = Extension( '_sass', sources, - library_dirs=[os.path.join('.', LIBSASS_DIR)], - include_dirs=[os.path.join('.', LIBSASS_DIR)], - depends=libsass_headers, + library_dirs=[os.path.join('.', 'libsass', 'src')], + include_dirs=[os.path.join('.', 'libsass', 'include')], + depends=headers, extra_compile_args=flags, extra_link_args=link_flags, ) @@ -216,8 +222,6 @@ def run(self): package_data={ '': [ 'README.rst', - os.path.join(LIBSASS_DIR, 'Makefile'), - os.path.join(LIBSASS_DIR, 'Makefile.am'), 'test/*.sass' ] },